Qt 的几个核心机制总结之 信号与槽

来源:互联网 发布:悟空源码网 编辑:程序博客网 时间:2024/05/16 09:20

信号与槽

1.功能:用于对象之间的通信

2.传统的GUI如何实现对象之间通信的?

使用的是回调函数(指向某个函数的指针),相比之下信号与槽的机制较为灵活,但是这种灵活是以损失性能为前提的,只不过信号与槽机制的性能仍然较高。

3.什么对象才能发射信号?

只有定义过该信号的类或者其派生类才能够发射该信号。

4.信号与槽的工作方式:

当一个信号被发射的时候这些槽就会被执行,只有当所有的槽正确放回后,发射函数才会返回。当一个信号与多个槽关联的时候,当这个信号发射的时候这些关联的槽就一一执行,但是他们的执行顺序是不定的,不能在程序中指定。在使用信号与槽的机制的时候要注意不要在槽中再将对应的信号发送出去,这样会形成死循环。

5.信号和槽的定义:

有信号和槽的类在定义的时候要在开始的地方加上Q_OBJECT编译器才知道使用moc工具进行扩展。

5.1 信号的定义:

使用关键词signals在类的头文件中定义

signal:
void  mysignal(para);

可以重载比如定义了上面的信号后还可以

void mysignal();

注意信号不需要定义函数实现,并且返回值都是void,信号代码会由moc工具自动生成。

5.2 槽的定义:

槽和信号定义的时候有个区别就是槽有访问权限,可以限制哪些对象的信号能够与之连接

public slots  任何对象都可以与之连接,一般用于组件类

protected slots 当前类以及子类的信号可以与之相连,一般用于类的实现部分

private slots  只有当前类可以讲信号与之关联。

槽的声明可以是虚函数,也可以重载,可以带有参数但是不能有默认参数,可以直接调用。

注意信号与槽的参数不能是函数指针,不能是模板类参数,同时不能使用默认参数。

6.信号与槽的连接:

一个信号可以连接一个槽   connect

一个信号可以连接多个槽

一个信号号可以连接一个信号  两个信号都会被发射

多个信号可以连接一个槽

信号与槽的连接可以断掉   

当一个对象呗删除的时候,Qt会将这个对象关联的所有连接断掉。 disconnect

要把信号与一个槽相连或者一个信号与信号相连,要注意他们的参数必须具有相同的顺序和相同的类型,如果信号的参数比相连的槽多的话,多余的参数将会被忽略掉,

但是要注意如果信号和槽对应的参数类型不一样的时候会报错。

如果发送者和接受者同属于一个对象的话,接受者的参数可以省略不写。

如果槽函数有返回值的话,返回值会被忽略。

7.信号的发送

使用关键词emit   

方法:在成员方法中使用emit  信号函数来发送信号。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 挂断低于限高的光缆怎么办 开大车挂住光缆怎么办 风把树枝挂断压到车该怎么办 货车柴油冻住了怎么办 尖头鞋老是折尖怎么办 打 氟氯西林疼怎么办 多余的十字绣线怎么办 硅胶类的东西沾到蓝药水怎么办? ph计斜率不到90怎么办 ph计斜率低于90怎么办 顾客说衣服起球怎么办 买的手机壳太滑怎么办 硅胶手机壳太滑怎么办 磨砂手机壳太滑怎么办 被热胶棒烫了怎么办 车钢垫子次了怎么办 【图】机组主轴密封漏水怎么办? 孕妇吃了好多杏怎么办 怀孕6个月吃了好多杏怎么办 白色纯棉衣服染色了怎么办 红色硅胶壳黑了怎么办 小米6gps信号弱怎么办 网线头卡子断了怎么办 入户网线太短了怎么办 孩子弹钢琴大拇指出琴键怎么办 手指肿胀疼痛变粗怎么办 iphone系统占用内存大怎么办 手机系统占用内存大怎么办 头盔固定配件掉了怎么办 移动4g网络不好怎么办 wifi登录密码忘记了怎么办 电脑登录密码忘记了怎么办 笔记本电脑登录密码忘记了怎么办 信用卡登录密码忘记了怎么办 华为p9后置摄像头模糊怎么办 手机图片文件夹删了怎么办 发票系统导出的xml怎么办 微信支付被限制怎么办 跨行三天不到账怎么办 测速正常但实际很慢怎么办 善领wifi上网慢怎么办