我有一个表单(继承自QMainWindow)和"设置"需要显示设置表单的按钮(继承自QWidget)。
按钮单击()连接了一些settingsButtonClick()插槽
在settingsButtonClick中:
void MainQT::settingsButtonClick()
{
SettingsForm *settingsForm = new settingsForm();
settingsForm->show();
}
它工作正常,但问题是我是否需要在某处删除此表单,否则当我关闭设置表单时它会被删除? 在这种情况下,我正确管理内存的方法是什么?我应该在MainForm的隐藏中实例化设置表单,只在请求时显示吗?
答案 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隐藏中实例化设置表单,只在请求时显示吗?
对此没有严格的规定,您可以:
请注意,您的代码会创建新对象并且永远不会销毁它,这会导致内存泄漏;考虑将指针保存为成员变量,并在用户再次打开“设置”对话框时重复使用它:
void MainQT::settingsButtonClick()
{
if(!mSettingsForm) mSettingsForm = new settingsForm();
settingsForm->show();
}