Вот другой подход, который помог моему приложению: во время обработки пользовательского события новые щелчки мышью / нажатия кнопок обычно обрабатываются только тогда, когда текущая выполняемая задача вызывает Q (Core) Application :: processEvents (). Это часто используется для перекраски, например когда индикатор выполнения меняется. Обратите внимание, что это может быть частью любых включенных сторонних библиотек на основе Qt.
Если вы измените эти вызовы на
QApplication::processEvents( QEventLoop::ExcludeUserInputEvents );
щелчков мыши, которые происходят во время вашей длинной задачи, будут обработаны после выполнения задачи. Конечно, могут быть случаи, когда вы не хотите откладывать события пользовательского ввода, поэтому вы должны проверять это для каждого отдельного вызова processEvents ().
Если у ваших сторонних библиотек есть вызовы processEvents (), и вы не можете их изменить, вы столкнетесь с той же проблемой, которую я боюсь.