加入从当前一个普通线程发送信号到ui,更新Ui只能使用Qt::BlockingQueuedConnection,用Qt::QueuedConnection会一会有用一会没用,并且会导致崩溃。
connect(this, &Task::startTask, this, _startFuncion, Qt::BlockingQueuedConnection);
比如当前是一个普通线程,那么_startFuncion的代码就会在UI线程上执行,这样外部可以直接设置回调函数直接刷新ui
QT的信号槽机制本质上就是一个消息队列,除了Qt::DirectConnection模式是直接调用槽函数,Qt::QueuedConnection,Qt::BlockingQueuedConnection 都是通过信号槽来实现信号传递机制,并堵塞信号直至槽函数执行完毕,区别只是Qt::BlockingQueuedConnection可以用于普通线程.
QMetaObject::invokeMethod(this, "update", Qt::QueuedConnection);