马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2016-10-21 11:28 编辑
在前面,不二简单介绍了信号与槽机制,没错,点我你就被弹飞啦
很简单的描述性介绍,虽然不是很了解其中理论基础,但并不影响我们使用这个机制。
这次,咱们好好唠唠关于这个Qt里最牛x的核心机制~~~
当然了,有兴趣的可以自行查看“Signals & Slots”关键字。
不二这次,把更深度的理论知识,一起分享下~
有不对的,你就说嘛~不要害羞!
好了,开始唠
信号和槽进行关联使用的是QObject类的connect()函数,一起看下原型长啥样子
QMetaObject::Connection QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection) [static]
是不是很帅气~
信号和槽用于两个对象之间的通信,信号和槽机制是Qt不同于其他开发框架的最突出特征!!!
在GUI编程中,当改变了一个部件时,总希望其他部件也能了解该变化,怎么办?
再换一种通俗说法
我们希望任何对象都可以对其他对象进行通信,怎么办?
别想歪了
例如,如果用户单击关闭按钮,希望关闭窗口,咋办?
为了实现这个交互通信过程,一些工具包使用了回调(callback)机制,而在Qt中使用了信号和槽来进行通信。
当一个特殊的事件发生时便可以发射一个信号,比如按钮被双击;
而槽就是一个函数,他在发射信号后被调用来响应这个信号。
Qt的部件类中已经定义了一些信号和槽,但更多的做法是子类化这个部件,然后添加自己的信号和槽来实现想要的功能。
前面使用过的信号和槽都是一个信号对应一个槽。
其实,一个信号可以关联多个槽函数!(看最上面那幅神图你就理解了)
甚至,一个信号还可以关联到另一个信号上哦~
如果存在多个槽与某个信号相关联,那么
当这个信号被发射时,这些槽会依次执行。
但是记住,这个执行顺序是随机滴!
无法指定顺序,所以不建议一个信号关联大于3个槽函数。
讲到现在,就可以解释这个最上面的函数原型了!
他的第一个参数为发送信号的对象
第二个参数为要发送的信号。
第三个参数是接收信号,常用this,表明本部件。
第四个参数是要执行槽。
对于信号和槽
必须要使用SIGNAL()和SLOT()宏!
必须要使用SIGNAL()和SLOT()宏!!
必须要使用SIGNAL()和SLOT()宏!!!
他们可以将其参数转换为const char *类型。
connect()函数的返回值为bool类型,当关联成功时返回true。
注意:
在调用函数的信号和槽只能有类型!不能有变量!
例如:SLOT(show_Value(int 250))
你就真是250了。。。
另一个注意:
信号中的参数类型要和槽中的参数类型相对应,信号中的参数可以多于槽中的参数,但不能反过来!!!
如果信号中有多余的参数,他们会被自动忽略的。
最后一个:
这次不是注意了,只是说明
函数的最后一个参数表明了关联的方式,点我弹过去看介绍~
一般默认值,emit,后面的例子回见到。
但也可以将其参数改为Qt::DirectConnection。
发射完信号立即执行槽,只有槽执行完成返回后,发射信号处后面的代码才可以执行~
O了,就酱~
|