我正在开发一个使用 QGLWidget 作为前端的基于 OpenGL 的游戏。但是由于所有不必要的开销(加上必须分发沉重的 QT 库!)我计划迁移到 GLUT,并且在大飞跃之前正在用更标准的替代品替换“Qt-stuff”。
为了替换控制帧速率和 fps 计时器的 QTimers,我试图将这些函数楔入一个简单的循环中,以替换 app.exec() 调用,如下所示:
//main.cpp
#include <QApplication>
#include <windows.h>
#include "mainwindow.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWin;//only contains a glwidget
mainWin.show();
do {
app.processEvents();
//call draw functions/fps based on system tick count
//...
Sleep(10);
} while (!app.closingDown()); //<-- this doesn't terminate
return 0;
}
到目前为止,它在运行时运行良好,但是一旦您尝试关闭窗口(通过系统“X”按钮),窗口就会消失,但程序会在后台挂起。问题是我找不到指示已调用 exit() 或 close() 的静态标志或查询函数。 bool closingDown()
似乎总是错误的,我尝试在~MainWindow
析构函数中切换一个静态标志并检测到它,但这也不起作用,因为直到main
结束才会调用它。我知道我可能可以通过绑定 QApps 的aboutToQuit()
信号来做到这一点,或者可能从 Qapp 创建一个派生类并拦截它,但这违背了远离信号/插槽的目的。有没有一种简单的方法可以从课堂外判断 QApplication 是否已被命令关闭?