深入理解Qt信号槽

简述

信号槽机制是观察者模式的一种应用,达到订阅-发布的效果。与之类似的有C#中的委托机制,只是写法有所不同。

深入信号槽

1. 使用场合

信号槽实现的主体是connect函数,常有两种写法(利用SIGNAL、SLOT宏和使用&类名::函数的结构)。
需要注意connect除了可以连接信号和槽,还可以连接信号与信号、单个信号与多个槽、多个信号与单个槽。

2. 第五个参数

connect函数有第五个参数,第五个参数主要是用来处理线程间数据的传递。
1)Qt::AutoConnection
默认的参数,可以省略。不需要跨线程传递的等价于Qt::DirectConnection,需要跨线程传递的等价于Qt::QueuedConnection。
2)Qt::DirectConnection
信号发送后槽函数立刻被调用,槽函数在信号发送的线程中执行。
3)Qt::QueuedConnection
当槽函数所在线程被执行时,槽函数才会被调用,槽函数在槽线程中执行。
4)Qt::UniqueConnection
不管调用多少次connect函数,信号槽只连接一次。
5)Qt::BlockingQueuedConnection
槽函数执行完毕后自动阻塞信号所在的线程。当槽函数和信号在同一个线程中时,禁止使用这个参数,不然程序崩溃。

3.传递引用

1)当信号和槽在同一个线程中
值传递会赋值对象;引用传递不会复制对象。和正常函数一致。
2)当信号和槽函数不在同一线程
第五个参数使用DirectConnection,结果和同一个线程中相同;
第五个参数使用QueuedConnection,值传递和引用传递参数没有区别,都会复制对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值