QT 中 信号槽 连接方式

1、qt中connect函数用来连接信号槽,一般有5种连接方式:直接连接、队列连接、自动连接、阻塞连接、防重复连接;

     1)直接连接:DirectConnection(同步调用)

           可以理解为信号直接调用槽函数,由信号的发出者直接调用槽函数执行,因此,槽函数在信号发出者所在线程中执行。

    2)队列连接:QueuedConnection(异步调用)

        只有当槽函数所在对象的队列中排在前面的槽函数执行完毕,才执行当前槽函数,因此,槽函数是在槽函数所在线程中执行。此时,即使信号槽参数是引用类型,也会另外复制一份

    3)自动连接:AutoConnection

            当信号与槽处于同一线程中,相当于直接连接;当信号与槽处于不同线程中,相当于队列连接。

    4)阻塞连接:BlockingQueuedConnection(同步)

        仅用于当信号和槽处于不同线程中时,当槽函数执行完毕以后,才会执行信号函数之后的代码。

    5)防重复连接:UniqueConnection

        信号和槽只能连接一次,不能连接多次。

2、对于在不同线程中连接信号槽,必须注意一下情况:

跨线程连接:一般推荐采用队列连接,才是线程安全的,直接连接时线程不安全。此时,参数都会被拷贝一份,即使参数是引用类型。因此,必须特别注意传递指针时,指向的对象在槽函数中执行时是否已经被析构(一般定义赋值运算符进行深拷贝,或者一起将长度发送过来)。

3、对于信号槽中引用类型参数和指针类型参数:

该类参数不推荐用于异步调用,即 队列连接,否则将因此意想不到的逻辑问题。除非参数是 const T& 或者 const T*。因为在异步调用中,槽函数的执行顺序是不定的,执行顺序将对参数T有影响。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值