1.三个基类简单理解
QWidget 父类(最简单的窗口)
QMainwindow 子类(多了菜单栏状态栏等功能)
QDialog 子类(对话框)
头文件(.h)与源文件(.cpp)的区别
2.头文件(.h)
头文件用来写类的声明、函数原型、#define常数等等,很少会写出具体的实现和细节。就好比抽象类一样。
作用是防止源文件被重复引用
//开头
//=if not define myQPushBotton
//如果引用头文件的源文件没有myQPushBotton,那么引入myQPushBotton
#ifndef MYQPUSHBOTTON_H
#define MYQPUSHBOTTON_H
//结尾
#endif
3.Qt头文件模板
class myWidget : public QWidget//继承
{
Q_OBJECT//宏,允许类中使用信号的槽的机制
public:
myWidget(QWidget *parent = nullptr);//有参构造函数,nullptr(0)为默认值
~myWidget();
private:
Ui::myWidget *ui;
};
4.源文件模板
(1)main文件(程序入口)
#include "mywidget.h"
#include <QApplication>// 包含一个应用程序的头文件
//argc:命令行变量的数量 argv:命令行变量的数组
int main(int argc, char *argv[])
{
//a:应用程序对象,有且只有一个
QApplication a(argc, argv);
//myWidget:窗口对象 父类->QWidget
myWidget w;
w.show();
//让a加入消息循环(机制,不会让程序一闪而过) 让代码阻塞到这一行后面代码不执行
return a.exec();
}
(2)myWidget文件(我的窗口)
第一个程序
#include "mywidget.h"
#include "ui_mywidget.h"
#include<QPushButton>
myWidget::myWidget(QWidget *parent)//(::)成员函数所属的类,后者是成员函数
: QWidget(parent)
, ui(new Ui::myWidget)//初始化列表
{
ui->setupUi(this);//.ui文件生成的类的构造函数,对界面进行初始化
//设置第一个按钮
QPushButton*btn=new QPushButton;
btn->show ();//以顶层的方式弹出窗口
//让btn对象依附在myWidget窗口中
btn->setParent(this);//this指向当前对象myWidget的指针
btn->setText("The first");
btn->move(0,0);
}
myWidget::~myWidget()
{
delete ui;
}
第二种方法设置按钮
//添加第二个按钮
QPushButton*btn2=new QPushButton("The second",this);
//移动第二个按钮
btn2->move(100,0);
//重置窗口大小
resize(800,500);
//设置窗口名字
setWindowTitle("第一个窗口");
//设置固定窗口大小
setFixedSize(800,500);
5.对象树
- Qt提供了对象树机制,能够自动、有效的组织和管理继承自QObject的Qt对象。
- 每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象信息,对象链表可通过children()获取。
- 当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。Qt 保证没有对象会被 delete 两次。开发中手动回收资源时建议使用deleteLater代替delete,因deleteLater多次是安全的,而delete多次是不安全的
对象树原文链接:https://blog.youkuaiyun.com/qq_34606496/article/details/123605139
如何构造一个对象树