QT信号槽Connect最后一个参数

发布时间 2023-07-30 16:26:30作者: 一只小瓶子

connect函数最后一个参数是Qt::ConnectionType,该参数指明信号槽的连接方式。

 

    1. 先说说什么是信号槽吧:

    当一个对象发生变化,想让与之相关联的其他对象对这个变化做出响应,这时候我们就需要不同对象(这些对象可能在不同线程)的通信。

     qt不同于其他框架的最主要特征是可以通过信号槽机制在两个对象之间通信,甚至可以跨线程通信。

 

  2. 那么信号槽就分为发出的信号(发送方)和接收的槽(接收方)是在同一线程和不同线程的两种场景。针对这两种场景,在connect连接信号槽的时候,由最后一个参数指明信号槽的连接方式:

    1)Qt::AutoConnection:默认方式,如果最后一个参数缺省时,自动设置为该自动连接方式。当发送方和接收方在同一线程的的时候相当于DirectConnection,在不同线程相当于QueuedConnection。此时连接类型是在发送方发出信号时确定的。

    2)Qt::DirectConnection:槽函数在信号发出时直接被调用,相当于槽函数运行于在信号发出的位置,槽函数执行完毕再继续执行发出信号后的部分。所以该连接方式适用于发送方接收方在同一线程的情况,如果多线程情况可能会造成崩溃。

    3)Qt::QueuedConnection:适用多线程异步场景,发送方发送信号之后会继续向下执行,无须等待槽函数执行完。槽函数在接收方线程事件队列中处理,不实时调用。

    4) Qt::BlockingQueuedConnection:适用于多线程同步场景,信号发出后,由接收方线程事件队列处理,但是在槽函数执行完成之前,发送方所在的线程会阻塞。如果发送方和接收方在同一线程,不可使用该方式连接。

    5)Qt::UniqueConnection:防止重复连接,这是一个标志位,可与前面四个类型通过按位或( | )的方式组合。使用该种方式连接,如果相同的信号槽已经建立过连接,再次连接将会失败。