У меня есть метод, который вызывается из QThreads
и основного потока. этот метод иногда может занимать много времени, чтобы выполнять вычисления в цикле, поэтому я помещаю QCoreApplication::processEvents()
, и это предотвращает замораживание GUI. В какой-то момент я изменил QCoreApplication::processEvents()
на QApplication::processEvents()
, но это заставило графический интерфейс замораживать (им довольно уверен, что это было его fereezing, потому что, поскольку я положил QCoreApplication::processEvents()
назад, он не замерз еще раз). Правильно ли я считаю, что вызов QApplication::processEvents()
как из основного потока, так и из QThreads может заморозить графический интерфейс?
Должен ли я использовать QCoreApplication:: processEvents() или QApplication:: processEvents()?
Ответ 1
Ни процесс processEvent() не должен быть закрыт только тогда, когда у вас есть действительные ожидающие события для обработки. Вы можете найти это полезным: Как заставить Qt работать, когда основной поток занят?
Ответ 2
Вам будет намного лучше переносить длительный процесс из основного потока, поэтому вам не нужно вызывать processEvents()
. В течение этого долговременного процесса вы можете излучать все необходимые сигналы, чтобы у gui была достаточная информация для выполнения обновлений и т.д. processEvents
, однако, обычно является костылем для плохого дизайна.