1.QT核心
Qt核心特点
QT对标准C++进行了扩展,引入了一些新的概念和功能。
元对象编译器( Meta-Object Compiler, MOC)是一个预处理器
先将Qt的特性程序转换为标准C++程序,再由标准C++编译器进行编译
使用信号与槽机制,只有添加Q_OBJECT宏,moc才能对类里的信号与槽进行预处理
Qt为C++语言增加的特性在Qt Core模块里实现,由Qt的元对 象系统实现。
包括:信号与槽机制、属性系统、动态类型转换等。
元对象系统( Meta-Object System)
QObject类是所有使用元对象系统的类的基类
在一个类的private部分声明Q_ OBJECT宏
MOC(元对象编译器)为每个QObject的子类提供必要的代码
![](https://i-blog.csdnimg.cn/blog_migrate/ecc551a37706c796dd30dc55c4c10f49.png)
2.属性系统、信号、槽
属性系统:
Q_ PROPERTY宏定义一个返回类型为type,名称为name的属性
![](https://i-blog.csdnimg.cn/blog_migrate/e545542864c5314fa152295fe8e9177c.png)
信号与槽
![](https://i-blog.csdnimg.cn/blog_migrate/7d3b05baa6ce6da7093f3c67c2c1808e.png)
最后一个参数:
Qt:: ConnectionType表示 了信号与槽槽之间的关联方式
Qt:: AutoConnection (缺省值) :自动确定关联方式。
Qt:: DirectConnection:信号被发射时,槽立即执行,槽函数与信号在同一线程
Qt:: QueuedConnection:事件循环回到接收者线程后执行槽,槽与信号在不同线程
Qt:: BlockingQueueConnection:与Qt:: QueuedConnection相似, 信号线程会被阻塞直
到槽执行完毕。当槽函数与信号在同一线程,会造成死锁。
在槽函数里,使用QObject:sender()可以获取信号发射者的指针
QSpinBox * spinbox = qobject_ cast<QSpinBox *>(sender());
3.混合方式UI设计
能用可视化设计的尽可能用可视化设计解决 ,可视化无法完成的,需要手动编写。
4.QT全局定义
<QtGlobal>头文件包含了Qt类库的一些全局定义:
基本数据类型
函数
宏
全局变量定义
确保在各个平台上各数据类型都有统一确定的长度
qreal缺省是8字节double类型浮点数,如果Qt使用-qreal float选项进行配置,就是4字节float类型的浮点数
qfloat16是Qt 5.9.0中新增的一个类,用于表示16位的浮点数,要使用qfloat16,需要包含头文件<QFloat16>
![](https://i-blog.csdnimg.cn/blog_migrate/f54dcde8b30519cd277de55894a2a636.png)
函数全局定义
![](https://i-blog.csdnimg.cn/blog_migrate/03e238cc9be59334c9f5c58fbe684fb1.png)
宏定义
Q_BYTE_ORDER、Q_BIG_ENDIAN和Q_LITTLE_ENDIAN: Q_BYTE_ORDER表示系统内存中数据的字节序,Q_BlG_ENDIAN表示大端字节序,Q_LITTLE_ENDIAN表示小端字节序。在需要判断系统字节序时会用到。
Q_DECL_IMPORT和Q_DECL_EXPORT: 在使用或设计共享库时,用于导入或导出库的内容
Q_DECL_OVERRIDE: 在类定义中,用于重载一个虚函数,例如在某个类中重载虚函数paintEvem(),可以定义如下: void paintEvent(QPaintEvent*)Q_DECL_OVERRIDE;
使用该宏后,如果重载的虚函数没有讲行任何重载操作,编译器将会报错
Q_UNUSED(name): 这个宏用于在函数中定义不在函数体里使用的参数
foreach(variable, container): 用于容器类的遍历
forever: 用于构造一个无限循环
qDebug(const char*message..):在debugger窗体显示信息,如果编译器设置了Qt_NO_DEBUG _OUTPUT,则不作任何输出