正如标题所述,我试图通过线程不断更新GUI表单元素,但表单似乎仍然很忙。我无法理解。这就是我接近它的方式。
connect(this,SIGNAL(SIGUpdateForm),this,SLOT(MyUpdateMehtod));
现在每当需要更新表单时,我只需执行以下操作。我在新线程中启动一个方法。然后新线程触发上述信号。
boost::thread t(&SomeClass::SomeMethod(),this);
现在,一旦启动了someMethod,我就是这样做的
void SomeMethod()
{
SIGUpdateForm(); //Launch the signal that will update the form
}
然后SIGUpdateForm调用MyUpdateMehtod(),因为信号(无论是排队还是直接都没有启动任何线程,因此表格似乎挂起了。)但这让我困惑,因为信号本身是从一个独立的线程调用的,为什么形式悬挂?我该怎么做才能使这项工作?
答案 0 :(得分:1)
Qt有自己的主题。实际上你不需要一个线程。 QTimer将为您完成。这是一个例子。
void updateForm()
{
ui->bla->setText("bla");
// bla bla method
}
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(updateForm()));
timer.start(3000);
现在updateForm()
将每3秒调用一次。 GUI不会挂起。另一种方法是处理事件循环,
while(....)
{
// some lengthy task
qApp->processEvents(QEventLoop::AllEvents);
}