1. ホーム
  2. c++

[解決済み] C++で簡単なQtコンソールアプリケーションを作るには?

2023-06-28 13:11:13

質問

Qt の XML パーサーを試すために、簡単なコンソール アプリケーションを作ろうとしていました。私は VS2008 でプロジェクトを開始し、このテンプレートを得ました。

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    return a.exec();
}

イベント処理は必要ないので、QCoreApplicationを作成してイベントループを実行することを怠るとトラブルになるのではと思い質問しました。ドキュメントには、ほとんどの場合推奨と書かれています。

しかし、好奇心のために、私はどのようにイベントループでいくつかの一般的なタスクを実行させ、その後アプリケーションを終了させることができるのか疑問に思っています。関連する例をグーグル検索することができませんでした。

どのように解決するのでしょうか。

イベントループを実行させたい場合のアプリケーションの構成について、簡単な方法を一つ紹介します。

// 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();
}