2016-02-26 44 views
2

我有一个窗体(从QMainWindow继承)与“设置”按钮,需要显示设置窗体(从QWidget继承)。我是否需要删除或关闭后?

按钮点击(),还有一些settingsButtonClick()插槽

而且在settingsButtonClick连接:

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

它可以正常工作,但问题是我应该需要的地方删除此形式,或者它会被删除时我关闭设置表单? 在这种情况下,我正确地管理内存的方式是什么?我是否应该在隐藏MainForm的ctor中实例化设置窗体,并且只根据请求显示?

+0

您需要手动删除它。但为什么'新'它在第一位?为什么不只是'SettingsForm settingsForm; settingsform.show();'? – BoBTFish

+1

@BoBTFish因为在你的情况下,表单会在显示后立即被破坏。 –

回答

2

我会做下列方式:

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

使用Qt::WA_DeleteOnClose将确保该settingsForm将在关闭之后被删除。 欲了解更多详情,请看Qt documentation

0

我应该在某处删除此表单,否则当我关闭设置表单时它会被删除?在这种情况下管理内存的正确方法是什么?我是否应该在隐藏MainForm的ctor中实例化设置窗体,并且只根据请求显示?

有没有严格的规定,可能会:

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

请你只注意,您的代码创建新的对象,从来没有破坏它,这将导致内存泄漏;考虑将指针保存为成员变量并重新使用它,如果用户另一次打开设置对话框:

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