gpt4 book ai didi

c++ - Qt::WA_DeleteOnClose

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

我正在学习 Qt 并尝试“Foundations of Qt Development”一书中的一些示例。在这本书中,有一节讲授单文档界面,并举例说明创建一个像记事本这样的简单应用程序。

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
setWindowTitle(QString("%1[*] - %2").arg("unnamed").arg("SDI"));

connect(ui->docWidget->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool)));

createActions();
createMenu();
createToolbars();

statusBar()->showMessage("Done");
}

书上说“将窗口属性设置为 Qt::WA_DeleteOnClose,这样 Qt 就会在窗口关闭后立即从内存中删除窗口。

它是如何工作的?

因为如果我使用 setAttribute(Qt::WA_DeleteOnClose);,当我结束程序时,会有一个 Debug Assertion Failed warning:_BLOCK_TYPEIS_VALID(pHead->nBlockUse)。如果移除 setAttribute 就没有问题。

最佳答案

如果您设置了所有父级权限(如果您创建一个新的 QObject/QWidget,则在构造函数中设置父级),Qt 会自行处理删除操作。如果 parent 会被摧毁,那么 children 也会被摧毁。在您的主文件中,您可以在堆栈上创建主窗口,这样它将在作用域结束时被破坏。

要调用 addToolbar,您不需要 this->,因为无论如何它都是类的一个方法。

工具栏 ptr 应该是一个成员,以便以后轻松访问它。但是在构造函数的初始化列表中用nullptr(或者NULL,如果你没有c++11)初始化它,就知道它是否被初始化了。

addToolBar 调用应该有效。解决方法是自己创建一个 QToolBar 并使用另一个 addToolBar 重载将指针添加到 MainWindow。

关于c++ - Qt::WA_DeleteOnClose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477930/

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