我正在開發基於OpenGL的遊戲,使用QGLWidget作爲前端。但是由於所有不必要的開銷(再加上必須分發沉重的QT庫!),我計劃遷移到GLUT,並且正在用更多的標準替代品替代'Qt-stuff',然後才能實現巨大的飛躍。Qt - 如何在不使用插槽的情況下檢測自定義事件循環中的關閉窗口
要更換控制幀率和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是否被命令從課外關閉?
是的,這是訣竅!我忘記了我的主窗口已經進行了分類,所以它在mainwindow頭文件中是一個簡單的內聯虛擬(void closeEvent(QCloseEvent * event){isRunning = false;}'for googlers)。 – Ghost2