Qt的:: WA_DeleteOnClose

tom*_*tom 4 c++ qt toolbar

我正在学习Qt,并在"Qt开发的基础"一书中尝试了一些例子.在本书中,有一节教授单文档界面,其中一个示例创建了一个简单的应用程序,如记事本.

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");    
}
Run Code Online (Sandbox Code Playgroud)

书中说"设置windows属性,Qt::WA_DeleteOnClose以便Qt在关闭后立即从内存中删除窗口.

这个怎么运作?

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

Gom*_*bat 6

如果你设置了所有的父权(如果你在构造函数中创建一个新的QObject/QWidget设置父项),Qt会自行处理删除.如果父母将被破坏,那么孩子也将被破坏.在主文件中,您可以在堆栈上创建主窗口,以便在范围结束时对其进行销毁.

要调用addToolbar你不需要this->,因为无论如何它都是类的方法.

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

addToolBar调用应该可以工作.解决方法是自己创建一个QToolBar,并使用另一个addToolBar重载将指针添加到MainWindow.