【问题标题】:Should I use QCoreApplication::processEvents() or QApplication::processEvents()?我应该使用 QCoreApplication::processEvents() 还是 QApplication::processEvents()?
【发布时间】:2011-01-10 04:38:54
【问题描述】:

我有一个从QThreads 和主线程调用的方法。这种方法有时可能需要很长时间才能在循环中进行计算,所以我输入了QCoreApplication::processEvents(),这样可以防止 GUI 冻结。在某些时候,我将QCoreApplication::processEvents() 更改为QApplication::processEvents(),但这导致GUI 冻结(我很确定这就是它的原因,因为自从我把QCoreApplication::processEvents() 放回去后它就没有再次冻结)我认为调用@ 是对的987654326@从主线程和QThreads都可以冻结GUI?

【问题讨论】:

    标签: user-interface qt


    【解决方案1】:

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

    【讨论】:

    • 我要试试 QtConcurrent::run。我可以在那里进行 GUI 操作还是应该像 QThread 一样发出信号
    • @yan bellavance:你应该发出信号,因为它会在一个单独的线程中。或者你可以使用 QFuture 的东西来提供帮助,它会为你创建和发出很多信号。
    【解决方案2】:

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

    【讨论】:

    • 我要试试 QtConcurrent::run。我可以在那里进行 GUI 操作还是应该像 QThread 一样发出信号
    • GUI 操作只能在主线程中执行。 QtConcurrent 是一个好主意,特别是如果您可以将工作划分为利用多个内核。
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2020-02-20
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多