gpt4 book ai didi

C++,Qt : deallocation of "non attribute" objects created in constructor

转载 作者:行者123 更新时间:2023-11-28 02:51:51 27 4
gpt4 key购买 nike

在下面的 Qt 类示例中,许多对象是在构造函数和构造函数调用的函数中创建的,但不是由属性指针指向的,据我所知,不能在析构函数中删除(有在关键字 delete 的任何文件中都不存在)。

http://qt-project.org/doc/qt-4.8/widgets-groupbox.html

在window.h中

class Window : public QWidget
{
Q_OBJECT

public:
Window(QWidget *parent = 0);

private:
QGroupBox *createFirstExclusiveGroup();
QGroupBox *createSecondExclusiveGroup();
QGroupBox *createNonExclusiveGroup();
QGroupBox *createPushButtonGroup();
};

在window.cpp中

Window::Window(QWidget *parent)
: QWidget(parent)
{
QGridLayout *grid = new QGridLayout;
grid->addWidget(createFirstExclusiveGroup(), 0, 0);
grid->addWidget(createSecondExclusiveGroup(), 1, 0);
grid->addWidget(createNonExclusiveGroup(), 0, 1);
grid->addWidget(createPushButtonGroup(), 1, 1);
setLayout(grid);

setWindowTitle(tr("Group Boxes"));
resize(480, 320);
}

QGroupBox *Window::createFirstExclusiveGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));

QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3"));

radio1->setChecked(true);

QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(radio1);
vbox->addWidget(radio2);
vbox->addWidget(radio3);
vbox->addStretch(1);
groupBox->setLayout(vbox);

return groupBox;
}

我是不是遗漏了什么或者它是一个“糟糕”的实现示例?正确的实现是将指针作为类 Window 的属性并销毁它们在 ~Window() 中指向的内容吗?谢谢。

最佳答案

因为所有对象都被添加到对象树中,所以它们会被自动删除。

例如所有小部件都添加到布局中,布局本身在窗口中设置。这将创建一个对象树。

您可以使用方法 QObject::dumpObjectTree() 获取当前对象树的可视化表示。

另见 Object Trees & Ownership在 Qt 文档中了解详细信息。

关于C++,Qt : deallocation of "non attribute" objects created in constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22857891/

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