我使用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 - 有没有办法让应用程序等到主窗口关闭?
由于
答案 0 :(得分:1)
app.exec()
是一个阻塞函数(它启动Qt事件循环),直到应用程序的最后一个窗口关闭才会返回。
由于缓冲问题,您确实可能看不到“1”。请改用qDebug() << "1"
。
答案 1 :(得分:0)
标准输出很可能是缓冲的,因此实际上可以打印“1”但不刷新。您必须刷新标准输出才能使其在正确的时间出现。或者你可以打印到cerr,这可能是无缓冲的。
答案 2 :(得分:0)
你指出程序在第一种情况下运行正常(来自QtCreator?)但没有你期望的控制台输出,而在第二种情况下,直接从控制台运行,程序退出而没有显示窗口?我会说你正在运行两个不同的可执行文件。