1

Webにあるチュートリアルに基づいて、単純なMDI親子アプリケーションを作成しました。QMainWindowには、子ウィンドウへのポインターがあります。次のコードは、適切な接続機能にバンドルされています。

main_window.hファイル

パブリックスロット:
    void openChildWindow();
プライベート:
    Ui :: MainWindow * ui;
    ChildWindow * childWindow;

main_window.cppファイル

void MainWindow :: openChildWindow()
{{
   childWindow = new ChildWindow(ui-> mdiArea); //ウィンドウをどこかで破棄してください
   childWindow-> resize(400、320);
   childWindow-> show();
}

私の質問は、mdiの子ウィンドウをmdiの親の中に保存するための最良の方法は何ですか?子ウィンドウへのポインタのリストである必要がありますか?

現在の実装では、同時に多くのmdi子を作成して閉じることができますが、閉じた後に日陰を残すことがあります(たとえば、子ウィンドウを最小化および最大化する場合)。どこかでmdiの子デストラクタを呼び出すのを忘れたのでしょうか?現在はそれだけです:

ChildWindow ::〜ChildWindow()
{{
    UIを削除します。
    std :: cout << "私は死んでいる!" << std :: endl;
}

しかし、私はそれを手動でどこにも呼びません。Qtプログラム全体が終了すると、Qt Creatorコンソールに「I'mdead」と表示されます(ただし、子ウィンドウを閉じると表示されます)。

4

1 に答える 1

1

MDIサブウィンドウへのポインタのリストを保存する必要はありません。この機能は、によってすでに提供されていQMdiArea::subWindowListます。

もう1つの問題については、サブウィンドウの属性を設定することをお勧めしますWA_DeleteOnClosesubWindow->setAttribute(WA_DeleteOnClose);)。これにより、サブウィンドウが閉じられたときにサブウィンドウのデストラクタが確実に呼び出されます。それでも問題が解決しない場合は、別の質問を作成することをお勧めします。

于 2013-01-27T15:21:33.143 に答える