我应该使用QCoreApplication :: processEvents()还是QApplication :: processEvents()?

时间:2010-01-27 22:58:35

标签: user-interface qt

我有一个从QThreads和主线程调用的方法。这个方法有时需要花费很长时间才能在循环中进行计算,所以我放QCoreApplication::processEvents()这可以防止GUI冻结。在某些时候,我已经为QCoreApplication::processEvents()更改了QApplication::processEvents(),但这导致GUI冻结(我非常确定那是什么让人感到惊讶,因为自从我放回QCoreApplication::processEvents()之后它又没有冻结了)我是有权认为从主线程和QThreads调用QApplication::processEvents()可以冻结GUI吗?

2 个答案:

答案 0 :(得分:11)

两者都不是,只有当您有要处理的实际待处理事件时,才应该使用processEvent()。 您可能会发现这很有用:How to make Qt work when main thread is busy?

答案 1 :(得分:11)

将长时间运行的进程移出主线程会更好,因此您无需调用processEvents()。在这个长时间运行的过程中,你可以发出你需要的任何信号,这样gui就有足够的信息来做更新等等。processEvents然而,通常是一个糟糕设计的拐杖。