目录
前言
这里主要做一些笔记加上个人的理解和随笔, 参考书籍<<Qt5.9 c++开发指南>>。
Qt类库概述
3.1 Qt核心特点
3.1.1 概述
- Qt本身不是语言,是
跨平台
的C++开发类库,为GUI而生,当然也可以面向学习c++等语言
控制台,类似linux中的gcc吧。- 特点
- 信号和槽
- 对象属性
- 元对象编译器MOC(Meta-Object Compiler)
- Qt Core是Qt的核心,其他模块都依赖于该模块
随笔:
信号与槽
也不是新东西,参考操作系统相关的信号(中断)等知识,在内核态理解为任务。在函数指针的回调
也有异曲同工之妙
MOC
简单理解是C中的宏定义,简单说就是编译预处理相关的,静态联翩
Qt Core
应该很多其他的窗口布局继承了这个核心吧, 而且强相关is-a
关系
3.1.2 元对象系统(Meta-Object System)
- Qt的原对象系统(提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统
- 元对象系统由三个基础组成
- QObject类是所有使用元对象系统的类的基类。
- 在一个类的private部分声明Q_OBJECT宏,使得类可以使用元对象的特性,如动态属性、信号与槽。
- MOC为每个QObject的子类提供必要的代码来实现元对象系统的特性。
构建项目时,MOC工具读取C++源文件,发现Q_OBJECT宏,为这个类生成另外一个包含有元对象支持代码的C++源文件,这个生成的源文件连同类的实现文件一起被编译和连接。- 除了信号与槽机制,还有一些其他功能
QObject::metaObject()
QObject *obj = new QPushButton;
obj->metaObject()->className(); //返回"QPushbutton"
***
QMetaObject::newInstance()函数创建类的一个新的实例
***
QObject::inherits(const char *className) 函数判断一个对象实例是否是名称为className的类或QObject的子类的实例,例如:
QTimer *timer = new QTimer; //QTimer是QObject的子类
timer->inherits("QTimer"); //true
timer->inherits("QObject"); //true
timer->inherits("QAbstractButton"); //false, 不是QAbstractButton的子类
***
QObject::tr() 和 QObject::trUtf8()函数翻译字符串,多语言界面设计
***
QObject::setProperty(), QObject::property()用于通过属性名称动态设置和获取属性值
***
QObject *obj = new QMyWidget;即 QWidget * widget = qobject_cast<QWidget*>(obj);类似c++的多态
3.1.3 属性系统
这部分暂折叠,后续使用再补充
3.1.4 信号与槽
这部分暂折叠,前面有一定认知。
3.2 Qt全局定义
3.2.1 数据类型定义
Qt数据类型 | 等效定义 | 字节数 |
---|---|---|
qint8 | signed char | 1 |
qint16 | signed short | 2 |
qint32 | signed int | 4 |
qint64 | long long int | 8 |
qlonglong | long long int | 8 |
quint8 | unsigned char | 1 |
quint16 | unsigned short | 2 |
quint32 | unsigned int | 4 |
quint64 | unsigned long long int | 8 |
qulonglong | unsigned long long int | 8 |
uchar | unsigned char | 1 |
ushort | unsigned short | 2 |
uint | unsigned int | 4 |
ulong | unsigned long | 8 |
ureal | double | 8 |
qfloat16 | float | 2 |
其中qreal缺省是8字节double类型浮点数,如果Qt使用-qreal float选项进行配置,就是4字节float类型的浮点数。
qfloat16是Qt5.9.0中心增的一个类,用于表示16位的浮点数,要使用qfloat16,需要包含头文件QFloat16
3.2.2 函数
这里不展开,很少使用这些函数,可以使用c++的一些limit相关或math相关
3.2.3 宏定义
不展开
3.3 容器类
不做展开,类似c++中的STL
3.4 容器类的迭代
这里不做展开,大概类似c++中的迭代器,以及增加了for(auto x:aary)这类的东西,后续通过代码做专项
3.5 Qt类库的模块
这里不做展开