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

13

我有一个方法,可以从QThreads和主线程中调用。这个方法有时需要在循环中进行计算,所以我加了 QCoreApplication::processEvents(),以防止GUI冻结。但是曾经使用过QApplication::processEvents(),结果导致GUI冻结(我相信这就是冻结的原因,因为自从恢复使用QCoreApplication::processEvents()后,它再也没有冻结过)。请问我是否正确地认为在主线程和QThreads中同时调用QApplication::processEvents()会导致GUI冻结?

2个回答

12

我将尝试使用QtConcurrent :: run。 我可以在其中执行GUI操作吗,还是像QThread的情况一样仍然需要发出信号? - yan bellavance
1
@yan bellavance:你应该发出信号,因为它将在单独的线程中运行。或者你可以使用QFuture来帮助你,它会为你做很多创建和发出信号的工作。 - Caleb Huitt - cjhuitt

12

把长时间运行的进程移出主线程,这样你就不需要调用processEvents()。在长时间运行的进程中,你可以发射任何所需的信号,以便gui有足够的信息来进行更新等操作。processEvents通常是一种解决设计不良的权宜之计。


我将尝试使用QtConcurrent::run。我是否可以在其中进行GUI操作,或者像QThread的情况一样仍需发射信号? - yan bellavance
1
GUI 操作只能在主线程中执行。如果您可以将工作分解以利用多个核心,QtConcurrent 是一个不错的选择。 - Kaleb Pederson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接