ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Qt信号槽连接方式 AutoConnection:Qt 默认帮你选,但你得知道它怎么选

Qt信号槽连接方式 AutoConnection:Qt 默认帮你选,但你得知道它怎么选 Qt AutoConnection:Qt 默认帮你选,但你得知道它怎么选Qt 里大部分信号槽连接,最后一个参数都没写:connect(worker, Worker::finished, this, MainWindow::onWorkFinished);这不是漏写了。Qt 默认使用Qt::AutoConnection,也就是让框架自己判断该直接调用,还是排队调用。很多教程说“默认就是自动连接”,说完就过去了。可一旦加上QThread,你会发现同一句话背后藏着一个关键问题:Qt 到底按什么规则自动?它只比较两件事信号发出时,Qt 会比较:当前发射信号的线程。接收者对象所属的线程,也就是receiver-thread()。比较结果很简单:同一个线程 - DirectConnection 不同线程 - QueuedConnection注意比较的是“发射信号的线程”,不是发送者对象所属的线程。多数时候两者相同,所以这个细节不显眼;但当你在别的线程里直接调用某个对象的方法,而那个方法再emit信号时,这个区别就会露出来。connect(worker, Worker::progressChanged, this, MainWindow::updateProgress
返回列表