gpt4 book ai didi

Qt 对象的 Qt 内存管理

转载 作者:行者123 更新时间:2023-12-01 22:49:59 25 4
gpt4 key购买 nike

我知道有很多关于 qt 内存管理的问题,但我找不到答案。

因此,对于 qt 小部件,如果您在创建对象时将 this(这是父小部件)作为参数传递,则父小部件将获得它的所有权,并在父部件死亡时将其删除。当您将小部件添加到布局并在小部件上设置该布局时,也会发生同样的情况。

但是,如果我声明一个指向 QColor 对象的指针,会发生什么情况? QColor 无法添加为另一个小部件的子级,也无法添加到布局中。当小部件死亡或者我需要在析构函数中手动删除它时,内存会被释放吗?

这里是一个例子...当 Widget 被销毁时,m_pColor 会发生什么?会被破坏或者内存泄漏吗?抱歉,代码中存在任何错误,我没有编译它,我只是将其写在这里作为示例。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QHBoxLayout;
class QPushButton;
class QColor;

class Widget : public QWidget
{
Q_OBJECT

public:
Widget( QWidget *parent = NULL );

public:
QHBoxLayout *m_pLayout;
QPushButton *m_pButton;
QColor *m_pColor;
};

#endif // WIDGET_H
<小时/>
#include "widget.h"

#include <QHBoxLayout>
#include <QPushButton>
#include <QColor>

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_pLayout = new QHBoxLayout;
m_pButton = new QPushButton( tr( "Button" ) );
m_pLayout->addWidget( m_pButton );

m_pColor = new QColor(0, 0, 0, 255);

setLayout( m_pLayout );
}

最佳答案

您的建议仅对继承QObject 的类有效(即将QObject 作为其父类(super class)之一)。这些属性不适用于其他类(甚至内置Qt)。由于QColor不是QObject的子类,因此当Widget被销毁时,m_pColor引用的对象不会被销毁。您必须手动执行此操作。

关于Qt 对象的 Qt 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13526456/

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