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;
}