c++ - Qt::WA_DeleteOnClose

标签 c++ qt toolbar

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

相关文章:

c++ - 如何使用 <system_error> 将 errno 转换为异常

Qt 构建 64 位

python - 狮身人面像 Qt ValueError : API 'QDate' has already been set to version 1

windows - Qt如何打开设备管理器

Android 7 中的 Androidx 导航图标兼容性问题

c++ - Firefox 扩展的多平台部署

C++ sd-bus源文件编译问题

c++ - 为什么 return 会改变我的值(value)?

c++ - 试图在大型机类 VS 6.0 中创建我自己的工具栏

android - 为什么 android.widget.SearchView 在单击时不展开,而是将图标移动到左侧?