我正在学习 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/