在主窗口关闭之前,不会到达main()代码中的QT应用程序app.exec()

时间:2012-03-06 16:32:11

标签: qt static qt4 main qmainwindow

我使用QT Creator 2.4.0创建了一个QT应用程序。 并创建了一个main.cpp文件,其中包含main()函数,如下所示:

  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 - 有没有办法让应用程序等到主窗口关闭?

由于

3 个答案:

答案 0 :(得分:1)

app.exec()是一个阻塞函数(它启动Qt事件循环),直到应用程序的最后一个窗口关闭才会返回。

由于缓冲问题,您确实可能看不到“1”。请改用qDebug() << "1"

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你指出程序在第一种情况下运行正常(来自QtCreator?)但没有你期望的控制台输出,而在第二种情况下,直接从控制台运行,程序退出而没有显示窗口?我会说你正在运行两个不同的可执行文件。