将QT项目中,每个文件的每行代码,自行注释一遍 重新手动实现对象树模型

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>               //引入头文件
#include<QPushButton>         


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }   //命名空间中声明Ui
QT_END_NAMESPACE

class Widget : public QWidget   //自定义的图形化界面类 继承自QWidget

{
    Q_OBJECT  //信号与槽对应的元   涉及到信号函数和槽函数的操作
signals:
    void change();           //定义一个信号函数,只有声明     
                                  

public slots:
    //void on_change_slot();     //自定义的槽函数  是一个完整的函数,既有声明也有定义
     


public:
    Widget(QWidget *parent = nullptr);  //自定义类的构造函数的声明,参数是一个QWidget类的指针,所依附的父组件       
    ~Widget();                           //自定义类的析构函数的声明

private:
    Ui::Widget *ui;               //ui界面的指针,可以通过该指针使用ui界面上拖拽出来的组件

    QPushButton *btn1;           //自定义的组件
};
#endif // WIDGET_H

main.cpp

#include "widget.h"  //引入该工程下的头文件

#include <QApplication>  //引入应用程序的头文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); //实例化一个应用程序类对象

    Widget w;                  //在栈区,给自定义的类实例化对象
    w.show();                   //调用展示函数


    return a.exec();        
}

widget.cpp

#include "widget.h"   //引入该工程下的头文件
#include "ui_widget.h"  //引入ui文件生成的c++头文件

Widget::Widget(QWidget *parent) //自定义类的定义部分
    : QWidget(parent)           //  调用父类有参构造,完成子类从父类中继承下来的成员初始化
    , ui(new Ui::Widget)    //     给ui指针,实例化空间

{
    ui->setupUi(this);  //调用ui中的类里面的成员函数

    this->btn1 = new QPushButton(this);  //给自定义的组件指针实例化空间

//    更改自定义组件内容是由this指针
    this->btn1->setText("按钮");

    //更改ui界面上的组件,使用ui指针
      ui->clickBtn->setText("按钮2");


}

Widget::~Widget()           //自定义类的析构函数的定义
{
    delete ui;             //显性将ui指针内容进行释放

}

对象树模型

#include <iostream>
#include <list>

using namespace std;

class Object
{
public:
    list<Object *> child;

public:
    Object(Object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            //说明创建对象时,给定了父组件,说明要将自己的地址放到父组件的孩子链表中
            parent->child.push_back(this);
        }
    }

    virtual ~Object()
    {
        for(auto p = child.begin();p != child.end();p++)
        {
            delete *p;
        }
    }
};

class A :public Object
{
public:
    A(Object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);

        }
        cout<<"A::构造函数"<<endl;
    }
    virtual ~A()
    {
         cout<<"A::析构函数"<<endl;
    }
};
class B :public Object
{
public:
    B(Object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);

        }
        cout<<"B::构造函数"<<endl;
    }
    virtual ~B()
    {
         cout<<"B::析构函数"<<endl;
    }
};

int main()
{
    A w;
   B *btn = new B(&w);
   // delete btn;



    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值