1

我根据网上找到的教程创建了一个简单的 MDI 父子应用程序。QMainWindow 有一个指向子窗口的指针。以下代码与适当的连接功能捆绑在一起。

main_window.h 文件

公共插槽:
    无效 openChildWindow();
私人的:
    ui::主窗口 *ui;
    子窗口 *子窗口;

main_window.cpp 文件

无效的 MainWindow::openChildWindow()
{
   childWindow = new ChildWindow(ui->mdiArea); // 一定要在某个地方销毁你的窗口
   childWindow->resize(400, 320);
   childWindow->show();
}

我的问题是将 mdi 子窗口存储在 mdi 父级中的最佳方法是什么?它应该是指向子窗口的指针列表吗?

使用当前的实现,我可以同时创建和关闭许多 mdi 子窗口,但有时它们在关闭后会留下阴影(例如,当我最小化和最大化子窗口时)。难道是我忘记在某个地方调用 mdi 子析构函数了吗?目前只有:

ChildWindow::~ChildWindow()
{
    删除用户界面;
    std::cout << "我死了!" << std::endl;
}

但我不会在任何地方手动调用它。当整个 Qt 程序终止时,我可以在 Qt Creator 控制台中看到“我死了”(但它应该在我关闭子窗口时出现)

4

1 回答 1

1

无需存储指向 MDI 子窗口的指针列表;此功能已由QMdiArea::subWindowList.

关于另一个问题,我建议WA_DeleteOnClose为子窗口 ( subWindow->setAttribute(WA_DeleteOnClose);) 设置属性,这将确保子窗口的析构函数在关闭时被调用。如果这不能解决问题,我建议为此创建一个单独的问题。

于 2013-01-27T15:21:33.143 回答