3

私は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);

それらがなければ、すべてがうまくいきます。ウィンドウにそのフラグが必要な場合、何かを変更できますか?

4

2 に答える 2

10

次のようなものが必要です。

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

テストプログラムは次のとおりです:http://pastebin.com/f5903c5f4

ここで、メインウィンドウのデストラクタでquit()を明示的に呼び出す必要があることに注意してください。

QApplication :: quitOnLastWindowClosedのドキュメントを読むと、次のことがわかります。

このプロパティがtrueの場合、Qt :: WA_QuitOnClose属性が設定された最後に表示されたプライマリウィンドウ(つまり、親のないウィンドウ)が閉じられると、アプリケーションは終了します。デフォルトでは、この属性はサブウィンドウを除くすべてのウィジェットに設定されています

メインウィンドウは(フレームレスの)ツールウィンドウであるため、カウントされます。これにより、ConfWindowは唯一の非サブウィンドウのトップレベルウィジェットとして残ります。したがって、ConfWindowを閉じると、アプリケーションインスタンスが終了するようになります。

于 2009-06-22T21:30:12.250 に答える
0

これがコードである場合、Qt に大きなバグがあります。
上記のコードは、最初の Windows を閉じるべきではありません。他に何か問題があるに違いありません。
アプリケーションが閉じていますか、それともクラッシュしていますか?

備考
configWindow を削除しているのは誰ですか? Qt::WA_DeleteOnCloseウィンドウを閉じた後にウィンドウを削除する属性があります。

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
于 2009-06-21T07:24:23.197 に答える