QtのXMLパーサーを試すためのシンプルなコンソールアプリケーションを作成しようとしていました。私はVS2008でプロジェクトを開始し、このテンプレートを得ました:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
return a.exec();
}
私はイベント処理を必要としないので、QCoreApplicationを作成してイベントループを実行するのを怠ると、問題が発生するのではないかと考えていました。ドキュメントには、ほとんどの場合に推奨されると記載されています。
しかし、好奇心のために、一般的なタスクをイベントループで実行してからアプリケーションを終了するにはどうすればよいでしょうか。関連する例をグーグルで検索できませんでした。
イベントループを実行したい場合に、アプリケーションを構築できる簡単な方法の1つを次に示します。
// main.cpp
#include <QtCore>
class Task : public QObject
{
Q_OBJECT
public:
Task(QObject *parent = 0) : QObject(parent) {}
public slots:
void run()
{
// Do processing here
emit finished();
}
signals:
void finished();
};
#include "main.moc"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Task parented to the application so that it
// will be deleted by the application.
Task *task = new Task(&a);
// This will cause the application to exit when
// the task signals finished.
QObject::connect(task, SIGNAL(finished()), &a, SLOT(quit()));
// This will run the task from the application event loop.
QTimer::singleShot(0, task, SLOT(run()));
return a.exec();
}
追加することを忘れないでください
CONFIG += console
qmake .proファイルのフラグ。
残りはQtクラスの一部を使用しているだけです。私が使用する1つの方法は、クロスプラットフォームでプロセスを生成することです。
QCoreApplication
はまったく必要ありません。他のオブジェクトと同じようにQtオブジェクトを含めるだけです:
#include <QtCore>
int main()
{
QVector<int> a; // Qt object
for (int i=0; i<10; i++)
{
a.append(i);
}
/* manipulate a here */
return 0;
}
QT Creatorでシンプルなコンソール「hello world」を作成できました
windows 7でクリエーター2.4.1およびQT 4.8.0を使用
これを行う2つの方法
プレーンC++
以下をせよ
または
QTコンソール
例:QTコンソール「hello world」
ファイル-新しいファイルプロジェクト「プロジェクト名」
その他のプロジェクト-QT Console Application
ターゲットは「デスクトップ」を選択します
プロジェクト管理-次へ
コード:
#include <QtCore/QCoreApplication>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cout<<" hello world";
return a.exec();
}
実行するctrl -R
上記のMSVC 2010(QT SDK)およびminGW(QT SDK)に使用されるコンパイラー
これが誰かを助けることを願って
私は最近QTを使い始めたばかりで、Wwwで情報と例を検索して、まだ簡単な例を探し始めています...
QCoreApplication :: exit(0)を呼び出してコード0で終了できます
Connect()がなくても、アプリケーションのquit()スロットにイベントを発生させることができます。このように、イベントループは少なくとも1ターンを実行し、main()ロジック内でイベントを処理する必要があります。
#include <QCoreApplication>
#include <QTimer>
int main(int argc, char *argv[])
{
QCoreApplication app( argc, argv );
// do your thing, once
QTimer::singleShot( 0, &app, &QCoreApplication::quit );
return app.exec();
}
.proファイルにCONFIG += console
を配置すること、または.qbs Project.CppApplicationにconsoleApplication: true
を設定することを忘れないでください。