Qt信号槽连接方式 QueuedConnection:跨线程信号槽,真正的消息投递
Qt QueuedConnection:跨线程信号槽,真正的消息投递跨线程信号槽最容易误解的地方是:信号并没有把一个函数“送到另一个线程直接执行”。Qt::QueuedConnection做的事情更像投递一封信。connect(worker, Worker::progressChanged, window, MainWindow::updateProgress, Qt::QueuedConnection);工作线程发出progressChanged时,Qt 会把“调用updateProgress和它的参数”包装成一个事件,塞进主线程的事件队列。等主线程轮到处理这封信,槽函数才会在主线程执行。为什么 UI 更新要用它Qt 的QWidget、QQuickItem等界面对象只能由 GUI 线程操作。工作线程可以计算图片、读取文件、请求网络,但不能直接摸进度条、标签、窗口。标准结构通常长这样:classWorker:publicQObject { Q_OBJECT signals: voidprogressChanged(intvalue); voidfinished(); publicslots: voiddoWork(); };

相关新闻