2011-02-04 109 views
1

私は、状態を保存するためにcloseEvent()をオーバーライドするモードレスダイアログを持っています。これは実際にダイアログを閉じるとうまくいきます。しかし、私が何らかの方法でアプリケーションを終了すると(もちろん、ダイアログが閉じてしまう)、closeEvent()は呼び出されません。モードレスQDialog:アプリケーション終了時にcloseEvent()が呼び出されませんか?

これは仕様です。それはQtバグですか?アプリケーションがシャットダウンしているときに近いイベントを受け取るようにウィジェットに設定する必要があるプロパティのようなものがありますか?

私はダイアログのデストラクタで "保存状態"のコードを複製することができると思いますが、必要がなければそれはより良いでしょう。

ありがとうございました!

+0

これはどのようなプログラミング言語ですか。 –

+0

C++ ...申し訳ありませんが、今すぐタグを付けました。 – Owen

答えて

1

最後のQMainWindowを閉じるのではなく、アプリケーションがメニューコマンドで終了すると、イベントシステムが正しくシャットダウンされず、ヒープ上のオブジェクトが単にリークされるというバグがあります。基本的には、すぐにexit();を呼び出します。

私はこれをMacプラットフォームでbugに提出しました。私はあなたのプラットフォームが何であるか、それが影響を受けるかどうかはわかりません。

+0

はい、これは問題の可能性があると思われる行に沿ったものです。 examples/mainwindows/applicationのような単純なQtの例を使用すると、メインウィンドウを閉じるとメインウィンドウのcloseEvent()が呼び出されますが、QApplication :: exit()を挿入すると呼び出されませんどこかに。 – Owen

3

多分あなたは難しい解決法を使うことができます:ダイアログのcloseEventをMainWindowのcloseEventから呼び出して、QCloseEventオブジェクトを引数として渡すだけです。たとえば、

void QtMainWindowTest::closeEvent(QCloseEvent *ev) 
{ 
    _dlg ->closeEvent(ev); 
} 
+0

確かに、それは可能です。ありがとう。私はそれが私のデストラクタでsaveSettings()への別の呼び出しをするよりメンテナンス面倒であるかどうかわかりません。 – Owen

+0

@Owen:メンテナンスは同じかもしれませんが、closeEventの呼び出しは(私にとって)はるかにクリーンです。しかしそれは単なる意見の問題です。よろしく。 – Vladimir

関連する問題