web-dev-qa-db-ja.com

C ++で簡単なQtコンソールアプリケーションを作成するにはどうすればよいですか?

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

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

    return a.exec();
}

私はイベント処理を必要としないので、QCoreApplicationを作成してイベントループを実行するのを怠ると、問題が発生するのではないかと考えていました。ドキュメントには、ほとんどの場合に推奨されると記載されています。

しかし、好奇心のために、一般的なタスクをイベントループで実行してからアプリケーションを終了するにはどうすればよいでしょうか。関連する例をグーグルで検索できませんでした。

69
neuviemeporte

イベントループを実行したい場合に、アプリケーションを構築できる簡単な方法の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();
}
97
baysmith

追加することを忘れないでください

CONFIG += console 

qmake .proファイルのフラグ。

残りはQtクラスの一部を使用しているだけです。私が使用する1つの方法は、クロスプラットフォームでプロセスを生成することです。

18
fabrizioM

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;
}
4
Simon Walker

QT Creatorでシンプルなコンソール「hello world」を作成できました

windows 7でクリエーター2.4.1およびQT 4.8.0を使用

これを行う2つの方法

プレーンC++

以下をせよ

  1. ファイル-新しいファイルプロジェクト
  2. プロジェクトの下で選択:他のプロジェクト
  3. 「プレーンC++プロジェクト」を選択します
  4. プロジェクト名を入力してください
  5. プロジェクト管理は次をクリックするだけです
  6. 通常のC++としてC++コマンドを使用できます

または

QTコンソール

  1. ファイル-新しいファイルプロジェクト
  2. プロジェクトの下で選択:他のプロジェクト
  3. qT Console Applicationを選択します
  4. ターゲットがデスクトップの「ティック」を選択します
  5. プロジェクト管理は次をクリックするだけです
  6. 次の行を追加します(すべてのC++には必要なものが含まれています)
  7. 「#include 'iostream'」を追加します
  8. 「using namespace std;」を追加します
  9. qCoreApplication a(int argc、cghar * argv [])10の後、変数とプログラムコードを追加します。

例: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で情報と例を検索して、まだ簡単な例を探し始めています...

3
code

QCoreApplication :: exit(0)を呼び出してコード0で終了できます

1
Andrew

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を設定することを忘れないでください。

0
UnePierre