【发布时间】:2015-08-13 15:17:22
【问题描述】:
背景故事:
我审查了我的一些代码,并创建了一个本地 QMessageBox 以显示错误,并将其分配给堆:
if (getAutopilotList.error() == 0) {
QMessageBox* error = new QMessageBox(0);
error->setDetailedText(getAutopilotList.errorString());
error->setText("something");
error->setWindowTitle(tr("Error!"));
error->show();
return;
}
开发者说:
这个指针会泄漏,你没有设置父级并且你永远不会删除 它。这里也不需要指针。至于父母不 使用 0,但 Core::ICore::mainWindow()。
我很困惑,因为我想:
- QWidgets 只在堆上工作
- 当消息框关闭时指针会自动
delete error;。
我尝试将 QMessageBox 放入堆栈,但没有显示。
问题:
- 我可以把这个 QMessageBox 放在堆栈上并让它工作吗?我应该这样做吗?
- 我需要明确
deleteQMessageBox 指针吗? - 为什么在这种情况下将父级设置为超过 0 的值很重要?
【问题讨论】:
-
new QMessageBox(0)是货物崇拜编码。您只需要:new QMessageBox.
标签: c++ qt pointers qwidget qmessagebox