一、原理
Qt的"信号与槽",笔者是这么理解的--"回调机制”。
在Gui用户界面中,往往有这种需求,“动作”一个窗口部件,需要激活其他的操作。这种功能,我们经常使用回调函数来实现。
在MINIGui中,也提供了一套类似的机制,就是postmessage、sendmessage。(呵呵,其实也是windows的机制啦~~)
信号与槽的关联有以下几种方式:
一个信号与一个槽关联;
一个信号与多个槽关联:槽函数的执行顺序是随机的,与关联的顺序无关;
多个信号与一个槽关联;
信号与信号关联:当第一个信号触发后,会激发Qt去发送第二个信号
二、函数解析
信号与槽通过QObject::connect(..)进行关联。
send是信号的发送者,必须是一个QObject类对象。
singal就是一个信号,Qt本身提供了一些信号。例如按钮的clicked();对话框的accept()、reject()等等。
当对象的状态发生改变时,信号被某一个对象发射(emit)。只有定义过这个信号的类或其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被执行,就像一个正常的函数调用一样。
method是槽函数。
type定义了信号与槽的关联方式:
像Qt::DirectConnection:信号发出去,等待槽函数返回才能继续执行之后的代码;
Qt::QueuedConnection:信号发出去,"就不管了",立即执行发送信号之后的代码;
而Qt::AutoConnection 相当于上面2个方式结合起来,当信号与槽在同一线程时,等同于Qt::DirectConnection;而在不同线程,效果等同于Qt::QueuedConnection。
这点和MNIGUI异曲同工。(GUI的基本原理是共通的~~~)
上面的函数实例就是将信号与槽关联起来。
SIGNAL和SLOT都是宏,返回类型是(const char *)
注意点:
1、如果在应用程序加入了信号与槽,则必须在类声明加入Q_OBJECT宏。
2、public slots意味着void on_btn_slot() 是槽函数。on_btn_slot()既可以当槽函数,也可以作为普通函数来使用。但要注意的一点就是,作为普通函数使用的时候,返回类型有效,而当成槽函数使用,Qt是忽略其返回类型的。
3、“参数对应”原则
信号的参数类型、个数与槽的参数类型、个数是“相同的”,不过槽的参数个数可以少于信号的参数个数,缺少的参数必须是最后n个参数。
4、宏定义不能用在signal和slot的参数中
5、构造函数不能用在signals或者slots声明区域内
6、函数指针不能作为信号或槽的参数
7、信号与槽不能有缺省参数
8、信号与槽也不能携带模板类参数
9、相关联的信号与槽是可以取消关联的。disconnect();
MIGUI的消息机制、Qt的信号与槽机制等都减少了应用程序的耦合度,良好的程序框架~~。虽然效率对于回调函数来说相对低下,~~~但是是可以忽略的。强大的windows开发消息机制,是吧~~亲!
三、信号与槽自动关联
我们通常手动关联信号与槽。Qt还提供了自动关联方法。
如果不是在(*.ui)创建的窗口部件,首先必须在类构造函数内加入下面一行代码。
对于Qt窗口部件已经提供的信号,如果能按下面的规则命名槽函数,那么Qt就能够自动进行关联
void on<窗口部件名>_<信号名>(<信号参数>);
这里要注意 窗口部件名为objectname,与我们命名的窗口部件变量名是不一样的。
我们可以通过void
QObject::setObjectName(constQString&name)
来设置窗口部件名
在这里附上程序源代码下载链接:http://download.csdn.net/detail/fzu_dianzi/3746787
以上纯属个人学习笔记,如果哪里错了,希望提出。愿和大家一起共同学习,一起进步。我的邮箱地址是:xzy@yingzhi8.com
分享到:
相关推荐
QT信号与槽机制浅析Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的 说法,简单点说就是如何在一个类...
qt学习笔记 qt学习笔记 qt学习笔记 qt学习笔记
比如每50ms发一次信号,槽函数要耗时100毫秒,为了获取最新的信号,而采取的操作!这里提供两种解决思路!请看代码!
Qt不同类进行信号与槽建立,并传递参数,Qt不同类之间槽函数连接
QT信号与槽.pdf
QT信号和槽的关系简介,分为:信号、槽、连接、注意事项和扩展事项等五部分内容。QT信号和槽的关系简介,分为:信号、槽、连接、注意事项和扩展事项等五部分内容。QT信号和槽的关系简介,分为:信号、槽、连接、注意...
信号和槽机制是Qt的核心机制之一,要掌握Qt编程就需要对信号和槽有所了解。信号和槽是一种高级接口,它们被应用于对象之间的通信,它们是Qt的核心特性,也是Qt不同于其它同类工具包的重要地方之一。在我们所了解的...
现代OpenGL+Qt学习笔记之二:程序框架http://blog.csdn.net/chaojiwudixiaofeixia/article/details/77917697源码。
Qt thread pool 线程池样例,信号槽,跨线程 lambda,使用样例;
QTdesigner信号与槽工作流程
QT 的信号与槽机制介绍 QT 的信号与槽机制介绍QT 的信号与槽机制介绍
个人吐血整理,从源码剖析Qt框架,绝对给力!
QT QT自定义信号和槽 QT自定义 信号和槽 QT信号。讲解怎么在 QT中自己定义消息和槽,QT编程可以看看
QT学习笔记_经验篇,平时工作中的学习心得与工作总结,希望对初学者能有帮助。
信号与槽用于对象间的通信,替代回调技术,当一个特定事件发生时,一个信号被发射,与之相关联的槽函数就会被调用。 信号与槽机制是类型安全的,信号的参数列表与它接收槽的参数列表要相匹配。编译器可以检测类型...
QT信号和槽概括,对初学QT来说有很大帮助了解架构
信号和槽机制是Qt的核心机制之一,要掌握Qt编程就需要对信号和槽有所了解。 三种机制,一对多,多对一,信号给信号,blog里面有详解~