4.Qt对象树与坐标

一、对象树

1.对象树的概念

​ 当创建对象在堆区的时候,如果指定的父类是QObject的派生下来的类或QObject的类,可以不用管理释放操作,他们会将对象放入对象树中,就是QObject的children()列表中。一定程度上简化了内存回收机制。

2.演示代码

  1. 新建一个mybtn类,继承QPushButton

    .h文件

    #ifndef MYPUSHBUTTON_H
    #define MYPUSHBUTTON_H
    
    #include <QPushButton>
    
    class MyPushButton : public QPushButton
    {
        Q_OBJECT
    public:
        explicit MyPushButton(QWidget *parent = nullptr);\
    
        ~MyPushButton();
    
    signals:
    
    public slots:
    };
    
    #endif // MYPUSHBUTTON_H
    

    .cpp文件

    #include "mypushbutton.h"
    #include <QDebug>
    
    MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
    {
        qDebug() << "我的按钮类的构造调用"; //会自动换行
    }
    
    
    MyPushButton::~MyPushButton()
    {
        qDebug() << "我的按钮类的析构";
    }
    
  2. 在窗口类中调用

    #include "mywidget.h"
    #include <QPushButton> //按钮控件的头文件
    #include "mypushbutton.h"
    #include <QDebug>
    
    myWidget::myWidget(QWidget *parent)
        : QWidget(parent)
    {
    
        //创建自己按钮类的对象
        MyPushButton* mybtn = new MyPushButton;
        mybtn->setText("我自己的按钮");
    
        mybtn->move(200,300);
        mybtn->setParent(this); //设置到对象树中
    
    }
    
    myWidget::~myWidget()
    {
        //先打印的这行话,再去找有没有儿子,确认没有儿子后才释放自己
        qDebug() << "父类调用了析构函数";
    }
    
  3. 查看结果
    在这里插入图片描述

小结:这里看到的是先打印的父类析构,后打印的子类析构。其实并不是这样的。原因在于析构函数是先执行内部的代码块,再去析构对象。myWidget类在析构自身时,会去查找自己是否有子类,没有就将自己析构。有则查看子类是否有子子类,重复以上过程。只有在子类都析构后,才会析构到自己。

二、坐标

​ 左上角为(0,0),x以右为正,y以下为正。
关于点是怎么算的。大家可以百度下像素点。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值