0

正如标题所述,我正在尝试通过线程连续更新 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() 但是因为信号(无论是排队还是直接不启动任何线程,因此看起来表单被挂起。)但这让我感到困惑,因为信号本身是从独立线程调用的,所以为什么是表单绞刑 ?我能做些什么来完成这项工作?

4

1 回答 1

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);
}
于 2013-08-15T21:34:01.747 回答