Добрый день,
разбираю пример с бегущей строкой 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 */) ?