0

QT Creator 2.4.0 を使用して QT アプリケーションを作成しました。以下のように main() 関数を含む main.cpp ファイルを作成しました。

  int main(int argc, char *argv[])
  {
    QApplication app(argc, argv);
    Q_INIT_RESOURCE(MainResources);
    MainWindow mainWindow;
    mainWindow.show();
    cout << "1\n";
    int retVal = app.exec();
    cout << "2\n";
    return retVal;
  }

この関数を実行すると、カウント「1」と「2」がまったく表示されません。コンソール出力に少なくとも「1」が表示されることを期待していました。メインウィンドウを閉じた後にのみ印刷されます。したがって、メインウィンドウが閉じられるまで app.exec() が実行されないように見えます...

1 - 誰かこれを説明できますか?

コマンド ラインからこのアプリケーションを実行しようとすると (アプリは静的にビルドされます)、application.exe ファイルを実行した直後に呼び出しが返され、メイン ウィンドウが閉じられるのを待ちません。

2 - メイン ウィンドウが閉じられるまでアプリケーションを待機させる方法はありますか?

ありがとう

4

3 に答える 3

1

app.exec()ブロッキング関数 (Qt イベント ループを起動する) であり、アプリの最後のウィンドウが閉じられるまで戻りません。

バッファリングの問題により、実際には「1」が表示されない可能性があります。代わりに使用qDebug() << "1"します。

于 2012-03-06T16:56:56.697 に答える
0

最初のケース(QtCreatorから?)でプログラムが正常に実行されることを示していますが、期待するコンソール出力がなく、コンソールから直接実行されている2番目のケースでは、プログラムはウィンドウを表示せずに終了しますか?2 つの異なる実行可能ファイルを実行していると言えます。

于 2012-03-06T16:49:55.723 に答える
0

標準出力がバッファリングされている可能性が非常に高いため、実際には「1」が出力される可能性がありますが、フラッシュされません。適切なタイミングで表示するには、標準出力をフラッシュする必要があります。または、代わりに cerr に出力することもできますが、これはバッファリングされていない可能性があります。

于 2012-03-06T16:36:47.040 に答える