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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: scroll(-1, 0) и paintEvent()  (Прочитано 1415 раз)
blood_shadow
Гость
« : Март 17, 2011, 14:14 »

Добрый день,
разбираю пример с бегущей строкой ticker(пример идет вместе с книгой):
есть текст "How long it lasted was impossible to say ++ ", который движется справо на лево
благодаря 30 милисек. таймеру
Код
C++ (Qt)
void Ticker::timerEvent(QTimerEvent *event)
{
   if (event->timerId() == myTimerId) {
       ++offset;
       if (offset >= fontMetrics().width(text()))
           offset = 0;
       update(); //scroll(-1, 0);
   } else {
       QWidget::timerEvent(event);
   }
}
 
каждые 30 милисекунд вызываеться пеинт ивент(с помощью ф-ции update()):
Код
C++ (Qt)
void Ticker::paintEvent(QPaintEvent * /* event */)
{
   QPainter painter(this);
 
   int textWidth = fontMetrics().width(text());
   if (textWidth < 1)
       return;
   int x = -offset;
   while (x < width()) {
       painter.drawText(x, 0, textWidth, height(),
                        Qt::AlignLeft | Qt::AlignVCenter, text());
       x += textWidth;
   }
}
 

тут собственно все понятно текст который не попадает в пределы виджета просто игнорируется
но в книге написано что если заменить update() на scroll(-1, 0); то текст просто будет
здвигаться на 1 пиксель влево, а перерисовываться будет только один пиксель который появился
справа, то есть scroll(-1, 0) вызывает еще update ( const QRegion & rgn ), но откуда painter знает
что надо только обновить самый последний пиксель, ведь я игнорирую QRegion & rgn в сигнатуре
ф-ции paintEvent(QPaintEvent * /* event */) ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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