gpt4 book ai didi

c++ - 你能把QWidgets放到栈上吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:53 27 4
gpt4 key购买 nike

背景故事:

我审查了我的一些代码,我制作了一个本地 QMessageBox 用于显示错误,并将其分配到堆中:

if (getAutopilotList.error() == 0) {
QMessageBox* error = new QMessageBox(0);
error->setDetailedText(getAutopilotList.errorString());
error->setText("something");
error->setWindowTitle(tr("Error!"));
error->show();
return;
}

开发者说:

This pointer will leak, you are setting no parent and you never delete it. Here as well you do not need a pointer. As for the parent do not use 0, but Core::ICore::mainWindow().

我很困惑,因为我想:

  1. QWidgets 只在堆上工作
  2. 指针将删除错误;在消息框关闭时自动。

我试过把QMessageBox放到栈上,但是没有显示。


问题:

  1. 我可以把这个 QMessageBox 放在堆栈上并让它工作吗?
  2. 我是否需要显式删除 QMessageBox 指针?
  3. 为什么在这种情况下将父级设置为大于 0 的值很重要?

最佳答案

原则上可以在栈上创建一个QWidget对象。在这里,它不会工作,因为对 error->show() 的调用不会立即显示消息框,它只是在返回主偶数循环时安排显示,此时对象将被摧毁。因此,删除QMessageBox 也不会起作用。设置父级将对象销毁的责任交给父级,当父级本身被销毁时,这是一个好主意。

但是,如果我理解您想要做什么,您希望在 return 之前等待用户单击 OK 按钮。如果是这样的话,你最好使用静态的QMessageBox函数,比如QMessageBox::warning。 .

如果你想要一个持久的消息框,那么你的代码就可以了,但是你应该添加以下调用:

error->setAttribute(Qt::WA_DeleteOnClose);

这将在相应窗口关闭时触发删除。

关于c++ - 你能把QWidgets放到栈上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com