2015-03-17 6 views
0

Я сделал приложение, выполняющее сложные вычисления (оно длится несколько минут или намного больше), и я заметил, что если приложение теряет фокус, оно замерзает. Если я сосредоточусь на этом, он будет работать хорошо. Это просто пользовательский интерфейс с одной кнопкой, которую я сделал с дизайнером qt. Есть 2 progressBars, которые останавливаются, когда QMainWindow теряет фокус. Вы когда-нибудь слышали об этой проблеме? Может быть, это связано с одним из свойств QMainWindow?
Благодарим за помощьЗамораживание приложения при потере фокуса

EDIT: Даже если пользовательский интерфейс зависает, расчет по-прежнему выполняется. Но это скучно для пользователя.

ответ

2

Похоже, вы делаете вычисления на основной (GUI) потоке. Создайте отдельный рабочий объект для обработки вычислений и переместите его в новый поток.

Есть отличный пример, как это сделать here.

+1

Правильно. Я попробую это. – Avatar36

+1

Да, это лучший способ сделать это. – Avatar36

0

Во время вычислений вам необходимо позвонить QCoreApplication::processEvents(), чтобы предотвратить замерзание. Также вы можете использовать QThread в качестве рабочей нити, но это более сложное решение.

+0

Должен ли я добавить эту строку в свою функцию вычисления? Или где-то еще? Причина использования его непосредственно в моей функции не работает при замораживании. – Avatar36

+1

Это должно быть в любом цикле, который поднимает вашу работу. Лучше использовать отдельную нить для работы. – DAhrens

Смежные вопросы