广东省建设工程安监局网站一键清理加速
实现跑马灯的方式多种多少样,可以通过定时器,或者animation等来实现。
本文通过定时器,将第一个文字,移动到最后一个这种方式来实现,还有其他方式哈。
直接上源码
h文件
#ifndef TEXTTICKER_H
#define TEXTTICKER_H#include <QtWidgets/QLabel>
#include<QDebug>/*跑马灯标签文字*/
class TextTicker : public QLabel
{Q_OBJECTpublic:TextTicker(QWidget *parent = 0);~TextTicker();void setText(QString text);void setFontSize(int fontsize);protected:void paintEvent(QPaintEvent *event);private slots:void updateText();private:int m_position;QString m_showText;int fontsize = 50;QString visibleText;
};#endif // TEXTTICKER_H
cpp文件
#include "TextTicker.h"
#include <QPainter>
#include <QTimer>TextTicker::TextTicker(QWidget *parent): QLabel(parent),m_position(0)
{QTimer *timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &TextTicker::updateText);timer->start(500);
}TextTicker::~TextTicker()
{}void TextTicker::setText(QString text)
{m_showText = text;
}void TextTicker::setFontSize(int fontsize)
{this->fontsize = fontsize;
}void TextTicker::paintEvent(QPaintEvent *event)
{(void) event;QPainter painter(this);painter.setFont(QFont("宋体",fontsize));painter.drawText(0 , rect().height() / 2 + fontsize /2 ,visibleText);化}void TextTicker::updateText()
{visibleText = m_showText.mid(m_position) + m_showText.left(m_position);setText(visibleText);m_position = (m_position + 1) % m_showText.length();update(); // 触发重绘事件
}