Russian Qt Forum
Ноябрь 27, 2024, 13:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProgressBar тормозит  (Прочитано 4721 раз)
alex-v
Гость
« : Сентябрь 27, 2010, 16:34 »

даже в пустом коротком цикле - медленно бегут проценты...
Подскажите как это дело ускорить?
Записан
crossly
Гость
« Ответ #1 : Сентябрь 27, 2010, 16:36 »

что значит медленно ??Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Сентябрь 27, 2010, 16:38 »

QCoreApplication::processEvents() не забыли вызвать после QProgressBar::setValue()?
Записан

Qt 5.11/4.8.7 (X11/Win)
alex-v
Гость
« Ответ #3 : Сентябрь 27, 2010, 17:24 »

QCoreApplication::processEvents() не забыли вызвать после QProgressBar::setValue()?
не забыл.
всёравно пустой цикл из 100 итераций - медленно происходит (т.к. должен мгновенно почти)
Записан
Marat(Qt)
Гость
« Ответ #4 : Сентябрь 27, 2010, 17:31 »

QCoreApplication::processEvents() не забыли вызвать после QProgressBar::setValue()?
не забыл.
всёравно пустой цикл из 100 итераций - медленно происходит (т.к. должен мгновенно почти)
С таким описанием проблемы вы вряд ли решите проблему. Нужны подробности, более четкое описание симптомов, исходники, позволяющие воспроизвести вашу проблему.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Сентябрь 27, 2010, 19:28 »

Обычно делают такие оптимизации:

- зовут на каждую N-ую итерацию:
Код
C++ (Qt)
if (i % 10) progress->setValue(i);
 

- или по времени:
Код
C++ (Qt)
QTime t;
t.start();
for (int i = 0; i < 10000; i++)
{
   if (t.elapsed() > 50)
   {
       t.start();
       progress->setValue(i);
   }
   some_work();
}
 
Записан

Гугль в помощь
alex-v
Гость
« Ответ #6 : Сентябрь 27, 2010, 19:43 »

да, на счет подобной оптимизации тоже думал. Видимо надо что-то подобное реализовать...

только может так: ?
Код:
if (!(i % 10)) progress->setValue(i);
« Последнее редактирование: Сентябрь 27, 2010, 19:45 от alex-v » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Сентябрь 27, 2010, 20:16 »

ну как бы processEvents достаточно медленная операция и вы тратите время впустую. Способы решения уже сказаны
Записан
Marat(Qt)
Гость
« Ответ #8 : Сентябрь 27, 2010, 20:26 »

да, на счет подобной оптимизации тоже думал. Видимо надо что-то подобное реализовать...

только может так: ?
Код:
if (!(i % 10)) progress->setValue(i);
Скорее так:
Код:
if (!(i % 10)) {progress->setValue(i);processEvents();}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Сентябрь 27, 2010, 20:42 »

Скорее так:
Код:
if (!(i % 10)) {progress->setValue(i);processEvents();}
Для немодального progress - да. А модальный сам позовет processEvents
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #10 : Сентябрь 27, 2010, 22:15 »

только может так: ?
Код:
if (!(i % 10)) progress->setValue(i);

Да, конечно, я сморозил Веселый
Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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