qt实现文字跑马灯效果
实现跑马灯的方式多种多少样,可以通过定时器,或者animation等来实现。
本文通过定时器,将第一个文字,移动到最后一个这种方式来实现,还有其他方式哈。
直接上源码
h文件
#ifndef TEXTTICKER_H
#define TEXTTICKER_H
#include <QtWidgets/QLabel>
#include<QDebug>
/*跑马灯标签文字*/
class TextTicker : public QLabel
{
Q_OBJECT
public:
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(); // 触发重绘事件
}