Qt:跨平台C++图形用户界面应用程序开发框架。
Qt的优点:
1、跨平台:Qt支持以下操作系统:Windows,Linux,Solaris,HP-UX,Unix,Irix,IOS等等
2、开源:提供源代码
3、丰富的AIP函数:Qt包括多达500个以上的C++类,还提供基于模板的collections,file,I/Odevice,directory management,date/time类,甚至包括正则表达式处理功能
4、支持2D/3D图形渲染功能,支持OpenGL
5、面向对象:Qt的良好封装机制使得Qt模块化程度非常高,可重用性较好,对于用户开发者来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间协同工作变得十分简单
6、QML脚本开发:Qt的QML模块提供QML应用程序的语言和基础,Qt Quick模块提供了许多可视化组件,支持模型-视图,动画框架,多用于构建用户界面。
Qt的内存管理机制:
使用对象父子关系进行内存管理的原理,简述为:在创建类的对象时,为对象指定父对象指针。当父对象在某一时刻被销毁释放时,父对象会先遍历其所有的子对象,并逐个将子对象销毁释放。
Qt的信号与槽:
实现对象与对象之间的通信。当一个对象发生了改变会发送一个信号通知另一个对象执行一个函数,这个函数被称为槽。
信号:
信号的声明只能在头文件中进行,Qt的signals关键字指出进入了信号声明区,随后即可声明自己的信号,信号只用声明,不用定义,发送信号用emit关键字。
槽:
槽的声明只能在头文件中进行,Qt的slots关键字指出进入了槽声明区,随后即可声明自己的槽。注意:如果只声明不实现槽函数,则会出现编译报错。槽函数可根据函数名调用或者信号调用。
信号与槽的连接:自动连接(通过命名连接)和手动连接(connect函数)
连接规则:信号的参数可以比槽多,反之不可以
信号与槽的关系可以一对一,一对多,多对一
信号也可以与信号连接
连接可以被删除,同一个连接可以绑定多次,触发一次信号会执行多次槽函数。
连接类型:
直连方式:DirectConnection
槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。 排队方式:QueuedConnection
槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的 当前函数执行完,进入事件循环之后,槽函数才会被调用。 自动方式:AutoConnection
默认的方式,如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如 果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型
阻塞排队方式:BlockingQueuedConnection
槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻 塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。
唯一连接方式:UniqueConnection
这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和 槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接