我需要删除还是关闭后?

时间:2016-02-26 10:27:32

标签: c++ forms qt user-interface widget

我有一个表单(继承自QMainWindow)和"设置"需要显示设置表单的按钮(继承自QWidget)。

按钮单击()连接了一些settingsButtonClick()插槽

在settingsButtonClick中:

void MainQT::settingsButtonClick()
{
    SettingsForm *settingsForm = new settingsForm();
    settingsForm->show();
}

它工作正常,但问题是我是否需要在某处删除此表单,否则当我关闭设置表单时它会被删除? 在这种情况下,我正确管理内存的方法是什么?我应该在MainForm的隐藏中实例化设置表单,只在请求时显示吗?

2 个答案:

答案 0 :(得分:2)

我会按以下方式进行:

void MainQT::settingsButtonClick()
{
    SettingsForm *settingsForm = new settingsForm();
    settingsForm->setAttribute( Qt::WA_DeleteOnClose );
    settingsForm->show();
}

使用Qt::WA_DeleteOnClose可确保在关闭settingsForm后将其删除。 有关详细信息,请查看Qt documentation

答案 1 :(得分:0)

  

我应该在某个地方删除此表单,还是在关闭设置表单时将其删除?在这种情况下管理内存的正确方法是什么?我应该在MainForm的ctor隐藏中实例化设置表单,只在请求时显示吗?

对此没有严格的规定,您可以:

  • 每次需要显示设置对话框,然后销毁对象;
  • 在MainForm构造函数中创建“设置”对话框,然后在用户操作时显示它;
  • 您甚至可以使用“设置”对话框作为存储设置值的对手

请注意,您的代码会创建新对象并且永远不会销毁它,这会导致内存泄漏;考虑将指针保存为成员变量,并在用户再次打开“设置”对话框时重复使用它:

void MainQT::settingsButtonClick()
{
    if(!mSettingsForm) mSettingsForm = new settingsForm();
    settingsForm->show();
}