как устранить зависание GUI?

187
25 августа 2018, 07:00

Как я понял в qt основной цикл событий начинается после

int QApplication::exec()

соответственно QMainWindow.show() открывает окно только после того как выполнение всех задач после этого прекращается и QApplication возвращает число из exec(). В обход этому в документации написано что можно использовать таймер с нулевым таймаутом что бы реализовать выполнение какого либо функционала после открытия окна.

To make your application perform idle processing, i.e., executing a special function whenever there are no pending events, use a QTimer with 0 timeout. More advanced idle processing schemes can be achieved using processEvents().

Проверил точкой остановой - все верно: app.exec() запускается перед функцией-слотом в таймере как и должно быть. И все равно если после открытия окна к нему идет беспрерывное обращение (допустим бесконечный вывод в QPlainTextEdit какой-нибудь строки), то окно тупо не открывается, а сидит в доке свернутое. Если же на форму повесить кнопку при нажатии к которой происходит аналогичное обращение к любому виджету через while (true){...} то форма намертво зависает. Как избежать подобного и подружить GUI с любой нагрузкой, ну и если ProcessEvent в этом поможет, то объясните пожалуйста как его применить.

Цель: допустим в качестве приложения у меня консоль где бесконечно что то может выводиться и мне нужно видеть каждое изменение.

Answer 1

Вынести вычисления в отдельный поток, тогда основной не будет блокироваться и зависаний не будет.

READ ALSO
Разъясните смысл std::in_place, std::in_place_type, std::in_place_index для std::optional, std::variant, и std::any

Разъясните смысл std::in_place, std::in_place_type, std::in_place_index для std::optional, std::variant, и std::any

С какой целью они используются для std::optional, std::variant, and std::any? Каков принцип их работыЕсли можно, с примерами

164
Как прилинковать нестандартную версию protobuf используя cmake

Как прилинковать нестандартную версию protobuf используя cmake

Есть проект под arm который компилируется и собирается на х86ой машине (кросскомпиляция)Есть версия библиотеки protobuf собранная под arm по этой...

191
Не мапится объект из POST запроса

Не мапится объект из POST запроса

Моя задача состоит в том, чтобы создать post запрос, получить из него объект Item и сохранить его в базу данных OracleДля эмуляции запроса я использую...

352
File is read-only. Правка файла в библиотеке мавена

File is read-only. Правка файла в библиотеке мавена

Процесс отладки показывает, что вызов с фронта обрабатывается классами из external libraries в maven

182