Russian Qt Forum
Мая 14, 2025, 00:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перерисовка окна  (Прочитано 5456 раз)
klim
Гость
« : Января 27, 2009, 12:19 »

В программе есть операция, которая выполняется достаточно долго. Для того, чтобы пользователь мог контроллировать ход процесса, на форме предусмотрен ProgressBar.
Проблема заключается в том, что если окно сворачивается, а затем разворачиватся (maximize, restore), до окончания этой "длинной операции" окно не перерисовывается. Т.е. оно либо белое (чаще всего), либо там картинка последнего состояния (до сворачивания).
Как это исправить?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Января 27, 2009, 12:31 »

ну, операцию в отдельный поток наверное вынести
Записан

ArchLinux x86_64 / Win10 64 bit
BaltikS
Гость
« Ответ #2 : Января 27, 2009, 12:46 »

qApp->processEvents(); написать в кусках где что то выполняется
Записан
klim
Гость
« Ответ #3 : Января 28, 2009, 00:03 »

qApp->processEvents(); написать в кусках где что то выполняется
Посмотрел пример findfiles в assistant'е - не понял принцип действия. Просто внутри цикла нужно вызвать и всё?
Записан
BaltikS
Гость
« Ответ #4 : Января 28, 2009, 07:31 »

klim, если у тебя опреации в цикле происходят, то да - самы простой способ, ну можно пойти по более сложному пути и как написал kuzulis вынести операцию в отдельный поток(и).....смотря какая у тебя задача... У каждого способа есть свои "+" и "-"
Записан
klim
Гость
« Ответ #5 : Января 28, 2009, 12:53 »

klim, если у тебя опреации в цикле происходят, то да - самы простой способ, ну можно пойти по более сложному пути и как написал kuzulis вынести операцию в отдельный поток(и).....смотря какая у тебя задача... У каждого способа есть свои "+" и "-"
Понятно. Спасибо!

Дописал в цикле qApp->ProcessEvents - скорость выполнения просто впечетляет. Раньше за минуту процентов 50 выполнялось, а теперь и 5-ти нет.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Января 28, 2009, 12:56 »

Дописал в цикле qApp->ProcessEvents - скорость выполнения просто впечетляет. Раньше за минуту процентов 50 выполнялось, а теперь и 5-ти нет.

В этом случае выполняйте qApp->ProcessEvents не на каждой итерации, а допустим через 50 итераций. Если этот вариант неподойдет - выносите в отдельный поток.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dendy
Гость
« Ответ #7 : Января 28, 2009, 14:12 »

Код
C++ (Qt)
QTime time;
time.start();
while ( notFinished )
{
 // make some work
 if ( time.elapsed() > 20 ) // maximum 20 ms for GUI freeze
 {
   time.start();
   progressBar->update();
   QCoreApplication::processEvents();
 }
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 22.