Qt概述
1.1 什么是Qt
Qt是一个跨平台的c++图形用户界面应用程序框架。他为应用程序开发者提供了建立艺术级图形用户界面所需要的所有功能。他是完全面对对象的,很容易扩展,并允许真正的组件编程。
1.2 Qt Creator
Qt Creator运行后的初始界面
1.2.1 GUI界面设计器
在Qt开发过程中,除了可以手写代码实现软件开发外,还可以通过Qt的GUI界面设计器(Qt Designer)进行界面的绘制和布局,该工具提高了Qt的基本可绘制窗口部件,在设计器中直接使用拖拽这些窗口部件,可以高效、快速的实现GUI界面的设计,直观形象,所见即所得。
-
对象查看器:列出了主界面中所有窗口部件,以及各窗口部件的父子关系和包容关系
-
属性编辑器:列出来窗口部件可编辑的属性
-
Action编辑器:列出了为窗口部件设计的QAction动作,通过“添加”或着"删除"按钮可以新建一个可以命名的QAction动作或删除指定的QAction动作
-
信号与槽编辑器:列出了在Qt设计器中关联的信号与槽,通过双击列中的对象或信号/槽,可以进行对象的选择和信号/槽的选择
-
控件编辑模式:可以在Qt设计器主界面中添加GUI界面并修改他们的属性和外观
-
信号/槽编辑模式:可以在Qt设计器主界面中的窗口部件上关联Qt已经定义好的信号与槽
-
伙伴编辑模式:可以在Qt设计器主界面的窗口部件上建立QLabel标签和其他窗口部件的伙伴关系
-
Tab顺序编辑模式:可以在Qt设计器主界面的窗口部件上设置Tab建在窗口部件上的焦点顺序
1.3 信号与槽机制
Qt提供了信号与槽机制用于完成界面操作的响应,信号和槽机制是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。
例如,要将一个窗口部件的变化情况通知给另外一个窗口部件,则一个窗口部件发生信号,另一个窗口部件的槽接收此信号并完成相应的操作,即可实现两个窗口部件之间的通信。
信号与槽是一种多对多的关系
1.3.1 信号与槽机制的连接方式
//1.一个信号可以与另外一个信号相连
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1));
//表示Object1的信号1发送可以触发Object2的信号1发送
//2.同一个信号可以与多个槽相连
connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));
connect(Object1,SIGNAL(signal2),Object3,SIGNAL(slot1));
//3.同一个槽可以相应多个信号
connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));
connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2));
//4.常用的连接方式
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
//signal为Object1的信号,slot为对象Object2的槽
1.3.2 优点
- 类型安全
信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数相同,不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个,否则编译器会报错 - 松散耦合
减弱了Qt对象的耦合度,激发信号的Qt对象无须知道是哪个对象的哪个槽需要接收他的信号,它只需要在适当时间发送就行,同样,对象的槽也不知道是哪些些信号关联了自己,一旦关联了信号和槽,Qt就保证了适合的槽得到了调用,即使关联的对象在运行时被删除,应用程序也不会崩溃。
一个类若要支持信号与槽,就必须从QObject或QObject的子类集成。注意:信号与槽机制不支持对模板的使用
1.3.3 效率
同回调函数相比,信号和槽机制运行速度有些慢,主要原因如下:
- 需要定位接收信号的对象
- 安全遍历所有的关联
- 编组和解组需要传递的参数
- 在多线程时,信号可能需要排队