跑马灯文字闪烁,及字体改变的问题。
#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;}参考论坛的例子修改的上下滚动效果,但是发现字会闪烁,另外我设定字体后,绘制的字上下会叠在一块,那位大哥,帮忙看一下咋回事。