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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Задержка при рисовании  (Прочитано 3158 раз)
vladymyr
Гость
« : Март 16, 2008, 17:23 »

Рисую граф серым цветом. Потом некоторые ребра надо сделать черными. При этом делать "по шагам" - с временым интервалом после каждого ребра. Функция Sleep(1000) делает задержку не на одно ребро, а сразу на все, и выводит потом все сразу, а не по шагам.
При этом приложение висит.
как выводит изображения не один раз, а походу работы алгоритма?
Код:
void GraphPrimKruskal::paintEvent(QPaintEvent *){
QPainter painter(this);
//painter.QPainter(this);

//init painter
//painter.setWindow ( 0, 0, 450, 450 );
painter.setRenderHint(QPainter::Antialiasing,true);

//draws all lines of list (gray)
painter.setPen(QPen(Qt::gray,4,Qt::SolidLine));
for(pallLines=allLines.begin();pallLines!=allLines.end();pallLines++)
painter.drawLine( QLine( dots.find(pallLines->getFirstPoint())->second,
dots.find(pallLines->getSecondPoint())->second) );

//draws all dots of map (black)
painter.setPen(QPen(Qt::black,10,Qt::SolidLine,Qt::RoundCap));
for(pdots=dots.begin();pdots!=dots.end();pdots++)
painter.drawPoint(pdots->second);

//draws ckecked lines of list (black) - decision
painter.setPen(QPen(Qt::black,4,Qt::SolidLine));
for(pallLines=allLines.begin();pallLines!=allLines.end();pallLines++){
if(pallLines->isChecked())
painter.drawLine( QLine( dots.find(pallLines->getFirstPoint())->second,
dots.find(pallLines->getSecondPoint())->second) );
//Sleep(1000);
}
}
Записан
Steven_Orko
Гость
« Ответ #1 : Март 18, 2008, 13:07 »

Посылай себе событие свое какое-нибудь по сигналу таймера через сколько надо тебе секунд. По событию устанавливаешь флаг о необходимости выполнения какой-либо следующей по счету части алгоритма. Когда все части (стадии) выполнены, вырубай таймер. В функции paintEvent() проверяй установку флага и номер следующей стадии выполнения алгоритма. Если флаг установлен и алгоритм не закончет, то рисуй то, что выпало на данный момент.

Образно, выглядит так.


Тебе ведь надо, чтобы пользователь выдел какой-то процесс изменения внешнего вида виджета с удобной для восприятия скоростью. Верно? Ну, тогда только так или как-то модифицировав, но смысл тот же останется. ИМХО.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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