2

Qt を使用して C++ でプログラムされたデスクトップ Windows アプリケーションがあります。アプリケーションにはいくつかの最上位ウィンドウがあり、これらを時々閉じてプログラムで再作成する必要があります。また、プログラムのユーザーが閉じるボタン (最小化ボタンと最大化ボタンの隣にあるボタン) をクリックすると、プログラム全体が終了するはずです。

私が抱えている問題は、どちらの場合もトップレベルのウィンドウがオブジェクトのcloseEvent()呼び出しを受け取ることです。QCloseEventそれが起こったときにプログラムを終了したいのですが(ユーザーが閉じるボタンをクリックした可能性があるため)、プログラムでウィンドウを削除して再作成しているため、ウィンドウが閉じている可能性もあります。

でこれら 2 つのケースを区別する方法はありQMainWindow::closeEvent()ますか?

4

2 に答える 2

4

QMainWindow::closeEvent() でこれら 2 つのケースを区別する方法はありますか?

はい: ユーザーがウィンドウの閉じるボタンをクリックすることによってトリガーされる閉じるイベントは自発的なイベントになりますが、呼び出すことによってトリガーされるイベントはそうでwindow->close()はありません。詳細については、のドキュメントを参照してQEvent::spontaneous()ください。

于 2013-06-15T09:09:14.610 に答える
2

プログラムでウィンドウを閉じる必要がある場合は、deleteLater()代わりにclose. ウィンドウが閉じられ、削除されます。ウィンドウを再度開くには、別のウィンドウ オブジェクトを作成する必要があります。

メソッドを使用することもできますhide()。ウィンドウは非表示になりますが、破棄されません。を使用して再度表示できますshow()

上記の両方のケースで、close イベントは発生せず、closeEvent()呼び出されません。が呼び出さcloseEventれると、ユーザーが閉じるボタンを押したことがわかります。

于 2013-06-15T08:19:09.137 に答える