时间2017/02/15
主要学习了Qt Creator、Qt_VS两种平台下的信号/槽的基础知识点
信号和槽机制(Signal%Slot)
Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。
信号与槽机制的连接方式
1、一个信号与一个槽相连
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
其中,signal为对象Objetc1的信号;slot为对象Object2的槽。
比如定义一个button的信号/槽机制:connect(button_name,SIGNAL(clicked()),this,SLOT(functions_name(arguments)));
也可写成:connect(button_name,“clicked()”,this,“functions_name(arguments)”);
2、一个信号与另一个信号相连
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal2));
表示Object1的信号1发射可以触发Object2的信号2发射。
3、同一个信号与多个槽相连
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector1,SIGNAL(signal1),Objector3,SLOT(slot2));
4、同一个槽可以响应多个信号
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector2,SIGNAL(signal1),Objector2,SLOT(slot1));
信号与槽机制的优点
(1)类型安全
信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数可以少于信号的参数个数,但缺少的参数必须是信号参数的最后一个或几个参数。
(2)松散耦合
信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道是哪个对象的那个槽需要接收它发出的信号,只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不需要关心它的信号有没有被接收到。
注:一个类若要支持信号和槽,就必须从QObject或QObject的子类继承,Qt信号和槽机制不支持对模板的使用。
信号与槽机制的效率
信号和槽机制增强了对象间的通信的灵活性,然后也损失了一些性能。同回调函数相比,信号与槽机制运行速度有些慢。
用Qt Creator创建一个带UI界面的项目,在界面上拖拽/新建一个button。
方法一:右键点击button,再点击"转到槽"。
这样其实就已经建立信号/槽机制,只不过是系统化生成的,没有代码的影子。
这里的信号是clicked(),即点击button这个事件;槽是刚新建的函数,比如on_pushButton_clicked()函数。在该函数内填写处理函数代码,即实现了一个带功能的按钮。
方法二:按下F4按键,编辑信号/槽。
点击button,即作为信号;再拖拽到某空白区域,即为槽。
再进入配置连接,建立信号/槽联系。下图,左边为信号,相当于触发事件;右边为槽,相当于相应事件。
注意,信号/槽既可以使用系统自带的函数,也可以使用自定义函数。比如,button的信号为clicked(),槽为自定义函数。
用Qt Creator新建一个不带UI界面的项目,即一些小部件,如button,label用代码调用来创建。步骤相对于“可视化操作”显得复杂一点,但可操作性很强,还可以锻炼编写代码的能力。
简单来说,就是在x.h和x.cpp中新建一些变量、函数,记得添加相关的头文件。比如#include<QpushButton>
具体内容,可参见该教程:Qt入门之信号与槽机制:http://www.cnblogs.com/MuyouSome/p/3515941.html
此平台和Qt Creator平台方法有相似之处,但也有一些不同。同样的,也有可视化实现和代码实现两种方式。
打开VS,创建Qt带UI界面的项目。双击x.ui,会自动启动Qt Designer打开其UI界面。
剩余操作与Qt Creator的方法二相同,即按下F4进行配置。注意:Qt Creator的方法一在这里不适用,即没有“转到槽”功能。
2、代码实现
打开VS,创建Qt不带UI界面的项目。
剩余操作,参见Qt Creator的相关方法。
可以新建界面的同时,新建若干变量和函数,关键在于将两者联系起来,
参考链接:http://blog.csdn.net/a1054359972/article/details/50748642
新闻热点
疑难解答