我的QLabel
未从插槽更新。我使用QObject::moveToThread
运行在独立的线程中发件人类:QLabel未从插槽调用更新
QThread* serviceThread = new QThread;
service = new ExportService();
connect(service,SIGNAL(stateChanged(Service::ServiceState)),
this,SLOT(statusChanged(Service::ServiceState)));
service->moveToThread(serviceThread);
serviceThread->start();
服务对象由与ServiceState
枚举值冒落信号发送状态时,该信号是由QDialog
槽捕获:
void Dialog::statusChanged(Service::ServiceState s)
{
switch (s) {
case Service::IDLE:
qDebug() << "Idle";
ui->label->setText("Service send response succesfully.");
break;
case Service::REQUESTING:
qDebug() << "Requesting";
ui->label->setText("Requesting response from service...");
break;
case Service::ERROR:
qDebug() << "Error";
ui->label->setText("Error. Cannot get response from service.");
break;
default:
break;
}
}
在对象上操作之后其发出两次信号,第一次的值为Service::REQUESTING
,第二次的值为Service::IDLE
我的QLabel
仅将文本更改为“服务发送响应成功”。在控制台中,我可以看到qDebug() << "Requesting";
正常工作,所以状态更改成功。
评论出来后后ui->label->setText("Service send response succesfully.");
标签已经变为请求国,但整个操作即完成我看到的“请求”,在控制台则“空闲”和QLabel更改后。
如果我想查看QLabel实时更改,该怎么办?
“请求”状态有多长时间?也许它太快了?用户界面是否响应? –
我想像@FrankOsterfeld一样。看起来'QLabel'更新速度太快,您无法修改更改。 –
你还需要明确指定'Qt :: QueuedConnection'在你的'connect()'调用中移动到另一个线程的对象。 –