Qt开发中信号槽是常用的技术,正常使用时都是4个参数,很少用到第5个,下面来看看connect的声明: 第五个参数是连接类型,声明如下:
enum ConnectionType {
AutoConnection,
DirectConnection,
QueuedConnection,
BlockingQueuedConnection,
UniqueConnection = 0x80
};
由此可知connect一共有5种连接方式,查Qt助手可以知道各自含义,如下:
AutoConnection 默认的连接方式,如果接收方在发出信号的线程中,使用Qt::DirectConnection。否则,使用Qt::QueuedConnection。在发出信号时确定连接类型。在Qt中默认是用的AutoConnection, 所有平时写信号槽时都是4个参数:
DirectConnection 当发出信号时,插槽立即被调用。槽在发送信号的线程中执行。
QueuedConnection 当控制返回到接收方线程的事件循环时调用槽。槽在接收方的线程中执行。
BlockingQueuedConnection 与Qt::QueuedConnection相同,只是发送信号的线程会阻塞,直到槽返回。如果接收方存在于发送信号的线程中,则不能使用此连接,否则应用程序将死锁。
UniqueConnection 这是一个可以使用按位OR与上述任何一种连接类型组合的标志。当Qt::UniqueConnection被设置时,如果连接已经存在,QObject::connect()将失败(例如,如果相同的信号已经连接到相同的对象对的插槽)。这个标志是在Qt 4.6中引入的。
在写信号槽时,要注意是否同线程,以及是否需要阻塞。