首页 > 代码库 > 第81课 信号与槽的连接方式

第81课 信号与槽的连接方式

1. QObject::connect函数

bool connect(const QObject* sender,           //发送者
                   const char* signal,        //信号
                   const QObject* receiver,   //接收者
                   const char* method,        //槽函数
                   Qt::ConnectionType type = Qt::AutoConnection);//连接方式

2. 深入信号与槽的连接方式

(1)Qt::DirectConnection(直接连接,立即调用):直接在发送信号的线程中调用槽函数,等价于槽函数的实时调用!

技术分享 

(2)Qt::QueuedConnection(队列连接,异步调用)信号发送至目标线程的事件队列,由目标线程处理;当前线程继续向下执行!

技术分享 

(3)Qt::BlockingQueuedConnection(阻塞式队列连接,同步调用)信号发送至目标线程的事件队列,由目标线程处理当前线程等待槽函数返回,之后继续向下执行。(注意:目标线程和当前线程必须不同!

技术分享 

(4)Qt::AutoConnection(默认连接):这是connect函数第5个参数的默认值,也是工程中最常用的连接方式。

技术分享 

(5)Qt::UniqueConnection单一连接

  ①默认下,可以多次调用connect函数将同一个信号连接到同一个槽函数多次的连接意味着同一个槽函数会被多次调用

  ②而UniqueConnection会使上述的多次连接中只保留一个,即同一个信号与同一个槽函数之间只有一个连接。

  ③其功能与AutoConnection相同,自动确定连接类型

【编程实验】信号与槽的连接方式

 

3. 小结

(1)信号与槽的连接存在多种方式

(2)立即调用方式等价于槽函数的实时调用

(3)默认方式自动确定连接类型

(4)同步方式中的目标线程与当前线程必须不同

(5)单一连接方式确保同一个信号与同一个槽之间只有一个连接。

第81课 信号与槽的连接方式