我正在使用 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
结束才被调用。我知道我可以通过绑定(bind)到 QApps 的 aboutToQuit()
信号,或者从 Qapp 创建一个派生类并拦截它来做到这一点,但这种方式违背了远离信号/插槽的目的。是否有一种简单的方法可以从类外部判断 QApplication 是否已被命令关闭? 最佳答案
你可以重新实现
void QWidget::closeEvent ( QCloseEvent * event )
设置静态标志的方法。该方法从窗口调用关闭事件。
关于c++ - Qt - 如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12597648/