Qt信号和槽的连接方式,connect第五个参数Qt::ConnectionType

Qt信号和槽的连接方式

enum Qt::ConnectionType
描述可在信号和槽之间使用的连接类型。特别地,它确定一个特定的信号是立即传递给槽还是排队等待稍后传送。

ConstantValueDescription
Qt::AutoConnection0默认方式,如果接收者位于发出信号的线程中,则使用Qt::DirectConnection。否则,将使用Qt::QueuedConnection。连接类型在发出信号时确定。
Qt::DirectConnection1当发出信号时,将立即调用槽函数。槽函数在发送信号的线程中执行。
Qt::QueuedConnection2当控制权返回到接收者线程的事件循环时,将调用槽函数。槽函数在接收者的线程中执行。
Qt::BlockingQueuedConnection3与Qt::QueuedConnection相同,不同点是发送信号以后发送者线程会阻塞,直到槽函数执行返回。如果发送者和接收者在同一个线程中,则不能使用此连接,否则应用程序将死锁。注意:使用此类型连接同一线程中的对象将导致死锁。
Qt::UniqueConnection0x80此标志可以与上述任何一种连接类型结合使用(使用按位或)。使用此标志时连接方式与Qt::AutoConnection相同。设置Qt::UniqueConnection时,如果连接已存在(即,如果同一信号已连接到同一对对象的同一个槽),则QObject::connect()返回false,连接操作将会失败。

对于队列连接,参数必须是Qt的元对象系统已知的类型,因为Qt需要复制参数以将它们存储在幕后的事件中。如果尝试使用队列连接时收到错误消息:

QObject::connect: Cannot queue arguments of type 'MyType'

在建立连接之前,调用qRegisterMetaType()注册数据类型。

实际应用中遇到过发送一次信号,槽函数多次触发的情况,原因是多次执行了connect()连接函数,连接几次信号和槽,发送信号时槽函数就会执行几次,所以不想多次触发槽函数的话就要记得disconnect(),或者使用Qt::UniqueConnection避免重复连接信号和槽。

Qt::UniqueConnection可以和其他方式混合使用,使用方式:static_cast< Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection)

注意:Qt::UniqueConnection只能用于连接成员函数,不能用于lambda表达式,非成员函数和仿函数。

来源:Qt API

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VectorAL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值