我正在製作一個Qt遊戲,並且我正在製作一個自定義遊戲循環,以便我可以精確控制邏輯時間步並以最大幀速率進行渲染。Qt - QWindow關閉時檢測
通常情況下,創建一個QWindow
你可以這樣做:在關閉窗口
...
QGuiApplication app(argc,argv);
QWindow* window = new QWindow();
window.show();
app.exec();
...
而且exec()
將返回。
不過,我做了以下方法:
QGuiApplication *app = new QGuiApplication(argc,argv);
QWindow* window = new QWindow();
window.show();
while (!terminate_loop) {
app->processEvents();
GameUpdate();
GameRender();
}
app->exit();
然而,當在窗口關閉我的循環不斷去。我需要檢測窗口何時關閉,以便我的循環可以終止。我試過下面爲了捕捉在窗口已關閉:
connect(app,SIGNAL(lastWindowClosed()),this,SLOT(windowClosed()));
他在關閉窗口下面的插槽應該被解僱,但它永遠不會被解僱。它確實火,當我用app->exec()
而不是手動處理事件。
void QTEngine::windowClosed() {
terminate_loop = true;
}
經進一步調查,Qt文檔說以下內容:
[lastWindowClosed]從EXEC發射()當最後可見主 窗口(即沒有父窗口)被關閉。
由於我沒有使用exec()
,此信號未被髮射。有沒有其他的方式來檢測QWindow何時關閉?
AFAIK你不能設置的Qt :: WA_DeleteOnClose上QWindow例如,只有在一個QWidget實例 – user1095108
既不解決方案適用於QWindow,因爲它沒有從QWidget中派生。 – fkorsa