#include <QtGui>
#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);
// QFont font("Courier" , 24);
// painter.setFont(font);
int textWidth = fontMetrics().width(text());
int textHeight =fontMetrics().height();
if (textHeight < 1)
return;
int x = -offset;
// while (x < width()) {
while(x<height()){
// painter.drawText(x, 0, textWidth, height(),
// Qt::AlignLeft | Qt::AlignVCenter, text());
painter.drawText(0,x,width(),height(),Qt::AlignLeft|Qt::AlignVCenter,text());
// x += textWidth;
x+=textHeight;
}
}
void Ticker::showEvent(QShowEvent * /* event */)
{
myTimerId = startTimer(10);
}
void Ticker::timerEvent(QTimerEvent *event)
{
if (event->timerId() == myTimerId) {
offset++;
if(offset>=fontMetrics().height())
offset=0;
// if (offset >= fontMetrics().width(text()))
// offset = 0;
// scroll(-1, 0);
scroll(0,-1);
} else {
QWidget::timerEvent(event);
}
}
void Ticker::hideEvent(QHideEvent * /* event */)
{
killTimer(myTimerId);
myTimerId = 0;
}
参考论坛的例子修改的上下滚动效果,但是发现字会闪烁,另外我设定字体后,绘制的字上下会叠在一块,那位大哥,帮忙看一下咋回事。