#ifndef TIMMER_H
#define TIMMER_H
#include <QtWidgets/QMainWindow>
#include "ui_timmer.h"
class timmer : public QMainWindow
{
Q_OBJECT
public:
timmer(QWidget *parent = 0);
~timmer();
QString text(){return myText;};
void setText(const QString &text);
void paintEvent(QPaintEvent *event);
void timerEvent(QTimerEvent *event);
void showEvent(QShowEvent *event);
private:
Ui::timmerClass ui;
int startNum;
int showID;
QString myText;
};
#endif // TIMMER_H
#include "timmer.h"
#include <QPainter>#include <QTimerEvent>
timmer::timmer(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
startNum=0;
showID=0;
setText(" Hello Qt ");
}
timmer::~timmer()
{
}
void timmer::setText(const QString &text)
{
myText=text;
update();
updateGeometry();
}
void timmer::paintEvent(QPaintEvent *)
{
QPainter painter(this);
int texeWidth=fontMetrics().width(text());//确定文本在水平方向上所需要的空间
if(textWidth<1)
return;
int x=-startNum;
while(x<width())
{
painter.drawText(x,0,texeWidth,height(),Qt::AlignLeft|Qt::AlignVCenter,text());///在考虑offset值得同时,多次绘制文本,直到能够填满窗口部件的宽度为止
x+=textWidth;
}
}
void timmer::showEvent(QShowEvent *)
{
showID=startTimer(30);
}
void timmer::timerEvent(QTimerEvent *event)
{
if(event->timerId()==showID)
{
startNum++;
if(startNum>=fontMetrics().width(text()))
startNum=0;
scroll(-1,0);//把窗口部件的内容向左滚动一个像素
}
}