qt实现文字跑马灯效果

实现跑马灯的方式多种多少样,可以通过定时器,或者animation等来实现。

本文通过定时器,将第一个文字,移动到最后一个这种方式来实现,还有其他方式哈。

直接上源码

h文件

#ifndef TEXTTICKER_H
#define TEXTTICKER_H
 
 
#include 
#include
 
/*跑马灯标签文字*/
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 
#include 


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(); // 触发重绘事件
}

你可能感兴趣的:(#,QPainter,Qt,qt,开发语言)