gpt4 book ai didi

c++ - QWidget删除问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:51 26 4
gpt4 key购买 nike

我有一个标准的 QWidget 派生类,但在小部件销毁时我得到了双重释放。每当我添加一个 QTreeView 指针作为成员变量时。

例如:

private:
QTreeView *m_treeView;

在类的构造函数中,我做了一个简单的:

m_treeView = new QTreeView(this);

并且QWidget派生类的析构函数是默认的析构函数。

如果我完全放弃使用成员指针并执行:

QTreeView *treeView = new QTreeView(this);

一切都很好。拥有 QLabel 成员指针也可以正常工作。为什么我会看到这种行为?指针是否是类的成员应该与类的析构函数无关,因为对象是在堆上创建的,并且类不会删除其成员变量指向的对象,除非在自定义析构函数。

最佳答案

每当您的 QWidget 派生对象被删除时,m_treeView自您通过 this 后也将被删除作为构建时的父对象 m_treeView

发生这种情况是因为 new QTreeView(this)最终会调用QObject( QObject * parent )这意味着您的成员变量被添加为您的 QWidget 派生对象的子对象。

The destructor of a parent object destroys all child objects.

来自 the Qt docs

编辑:对不起,错过了

And the QWidget-derived class's destructor is the default destructor.

部分

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

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