www.pudn.com > chap07.rar > ticker.cpp


#include  
 
#include "ticker.h" 
 
Ticker::Ticker(QWidget *parent) 
    : QWidget(parent) 
{ 
    offset = 0; 
    myTimerId = 0; 
} 
 
void Ticker::setText(const QString &newText) 
{ 
    myText = newText; 
    update(); 
    updateGeometry(); 
} 
 
QSize Ticker::sizeHint() const 
{ 
    return fontMetrics().size(0, text()); 
} 
 
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; 
    } 
} 
 
void Ticker::showEvent(QShowEvent * /* event */) 
{ 
    myTimerId = startTimer(30); 
} 
 
void Ticker::timerEvent(QTimerEvent *event) 
{ 
    if (event->timerId() == myTimerId) { 
        ++offset; 
        if (offset >= fontMetrics().width(text())) 
            offset = 0; 
        scroll(-1, 0); 
    } else { 
        QWidget::timerEvent(event); 
    } 
} 
 
void Ticker::hideEvent(QHideEvent * /* event */) 
{ 
    killTimer(myTimerId); 
}