不断更新GUI表单元素,使表单不会挂起

Updating GUI form elements continuously so that Form does not hang

本文关键字:表单 挂起 元素 GUI 更新      更新时间:2023-10-16

正如标题所述,我正试图通过线程不断更新GUI表单元素,但表单似乎仍然很忙。我不能理解。以下是我如何接近它。

connect(this,SIGNAL(SIGUpdateForm),this,SLOT(MyUpdateMehtod));

现在,每当需要更新表单时,我只需执行以下操作。我在一个新线程中启动了一个方法。然后,新线程触发上述信号。

boost::thread t(&SomeClass::SomeMethod(),this);

一旦某个方法开始,这里就是我所做的

void SomeMethod()
{
      SIGUpdateForm(); //Launch the signal that will update the form
}

SIGUpdateForm然后调用MyUpdateMehtod(),但是由于信号(无论是排队的还是直接的,都不会启动任何线程,因此看起来表单是挂起的。)但这让我很困惑,因为信号本身是从一个独立的线程调用的,那么为什么表单挂起呢?我能做些什么来使它工作?

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);
}