【QT】对象树

在Qt框架中,QObject类以对象树的形式组织,Parent指针用于管理对象的生命周期。当创建一个QObject对象时,可以指定一个父对象,新对象会被添加到父对象的children列表中。父对象析构时,其children列表中的所有对象也将被析构。因此,为了避免析构顺序错误和重复析构导致的问题,推荐在创建对象时指定parent,并优先考虑在堆上创建对象。
摘要由CSDN通过智能技术生成

在Qt中创建对象的时候我们会提供一个Parent指针,如:

QPushButton *btn2 = new QPushButton("这是一个按钮2",this);//这里将QPushButton对象的parent指针设置为本widget

这个Parent指针是什么?

  • QObject

QObject是以对象树的形式组织起来的。

当创建一个QObject对象时,会看到QObject的构造函数接受一个QObject指针为参数,这个参数就是Parent指针,这相当于,在创建QPushButton时,可以提供一个其父对象,我们创建的这个QPushButtont对象会自动添加到其父对象(Qobject)的 children()列表​ 。当父对象析构的时候,这个列表中的所有对象也会被析构 (注意,这里的父对象并不是继承意义上的父类! )

 使用的注意事项

        因为栈区和堆区不同的声明对象的原因导致出现,wiget和其他子类组件析构顺序错误的情况。

/*该段代码无问题:因为栈一般先构造的后析构,
下面程序是先析构button,同时将button从window的子对象列表删除,
然后析构window,仅析构window (window无子对象)
*/
QWidget window;
QPushButton button = QPushButton(“退出”,&window);
/*该段代码有问题:因为栈一般先构造的后析构,导致重复析构,程序崩溃。
下边程序是先析构window,析构window及window子对象(quit),然后析构quit
*/
QPushButton quit("Quit");
QWidget window;
quit.setParent (&window);

解决:在QT中,尽量构造的时候指定parent对象, 并且大胆在上创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值