Qt 连接类型总览:一个信号,为什么能有四种执行方式
很多人第一次看到这段代码时,注意力都放在前四个参数上:谁发信号、发哪个信号、谁接收、哪个槽函数处理。
connect(sender, &Sender::changed, receiver, &Receiver::handleChanged, Qt::AutoConnection);第五个参数 Qt::AutoConnection 往往被当成“可写可不写的东西”。平时确实可以不写,因为它就是默认值。但当程序开始用线程,这个参数就不再是装饰品了。它决定的事情很关键:信号发出后,槽函数在哪个线程执行,以及是立刻执行还是排队等待。
先把四种连接方式摆在桌面上:
连接方式 | 槽函数何时执行 | 槽函数在哪个线程执行 | 常见用途 |
|---|---|---|---|
Qt::AutoConnection | Qt 自动决定 | 同线程时当前线程,跨线程时接收者线程 | 大多数普通连接 |
Qt::DirectConnection | 发出信号时立即执行 | 发射信号的线程 | 确定同线程、需要立即响应 |
Qt::QueuedConnection</ |