質問
2つのウィンドウを作成しようとしています。 2番目は1番目に呼び出す必要があります。私は子供と親をつなげません。 しかし、2番目のウィンドウを呼び出して閉じたとき、1番目のウィンドウも閉じました。私は何をすべきか? 両方のウィンドウはQWidgetから継承されます。 C ++およびQt
お粗末な説明はごめんなさい。 メインウィンドウがあります。 QMainWindowから継承したクラス。 2番目のウィンドウを作成したこと。 QWidgetから継承したクラス。 最初の(メインウィンドウ)では、2番目のウィンドウを作成して呼び出します
ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();
親へのリンクを提供せずに。すべて正常に動作しますが、2番目のウィンドウ(config-window)を閉じると、メインウィンドウも閉じます。これは必要ありません。 config-windowを閉じた後にメインウィンドウを閉じるのをブロックするにはどうすればよいですか。
希望をもう少し詳しく説明してください。
最初のウィンドウには次のフラグがあります:
this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
それらがなければ、すべて問題ありません。ウィンドウにそのフラグが必要な場合、何か変更できますか?
解決
次のようなものが必要です:
QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);
テストプログラムは次のとおりです。 http://pastebin.com/f5903c5f4 。
注意:今、明示的に quit()を呼び出す必要がありますメインウィンドウのデストラクタで。
QApplication :: quitOnLastWindowClosedドキュメントを読むと、アウト:
このプロパティがtrueの場合、Qt :: WA_QuitOnClose属性が設定された最後の表示プライマリウィンドウ(親のないウィンドウ)が閉じられると、アプリケーションは終了します。デフォルトでは、この属性はサブウィンドウを除くすべてのウィジェットに設定されます
メインウィンドウは(フレームレス)ツールウィンドウであるため、カウントされます。そのため、ConfWindowは、サブウィンドウ以外のトップレベルウィジェットとしてのみ残ります。したがって、ConfWindowを閉じると、アプリケーションインスタンスが終了します。
他のヒント
これがコードの場合、Qtに大きなバグがあります。
上記のコードは最初のWindowsを閉じることはありません。何か他の問題があるはずです。
アプリケーションは閉じられていますか、またはクラッシュしますか?
備考
configWindowを削除しているのは誰ですか?ウィンドウが閉じられた後にウィンドウを削除する Qt :: WA_DeleteOnClose
属性があります。
ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();