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;
  }

当我执行这个函数时,couts“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?)但没有您期望的控制台输出,在第二种情况下,直接从控制台运行,程序退出而不显示窗口?我会说您正在运行两个不同的可执行文件。

于 2012-03-06T16:49:55.723 回答
0

标准输出很可能被缓冲,因此“1”实际上可能被打印但没有被刷新。您必须刷新标准输出才能使其在正确的时间出现。或者您可以改为打印到 cerr,这可能是无缓冲的。

于 2012-03-06T16:36:47.040 回答