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()
常にfalseのようで、デストラクタの静的フラグを切り替えて~MainWindow
検出しようとしましたが、終了するまで呼び出されないため、これも機能しませんmain
。QAppsのaboutToQuit()
信号に結び付けるか、Qappから派生クラスを作成してそれをインターセプトすることで、おそらくそれを実行できることはわかっていますが、そのようなものは、信号/スロットから離れるという目的に反します。クラスの外部から、QApplicationがシャットダウンするように命令されたかどうかを確認する簡単な方法はありますか?