最终效果图
代码很简单,直接源码
源码
#include "salabel.h"
#include <QPainter>
SALabel::SALabel(QWidget *parent)
:QLabel(parent)
{
QFont serifFont("Times", 20, QFont::Bold);
setFont(serifFont);
m_curIndex = 0;//当前角码
m_showText = "This is a textTicker Text!";//显示的文字
m_charWidth = fontMetrics().width("a");//每个字符的宽度
m_charLength = fontMetrics().width(m_showText); //总的文字长度
startTimer(50);//定时器计算文字、刷新
}
SALabel::~SALabel()
{
killTimer(1);
}
void SALabel::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);
QPainter painter(this);
QPen pen(QBrush(linearGrad),2);
painter.setPen(pen);//设置渐变
//根据Label的宽度和显示字符串的长度,计算每次drawText的位置和次数
for(int Index = 0;-m_charWidth * m_curIndex + m_charLength * Index< width();Index++)
{
painter.drawText(-m_charWidth * m_curIndex + m_charLength * Index, 30, m_showText);
}
}
void SALabel::timerEvent(QTimerEvent *event)
{
if(event->timerId() == 1)
{
m_curIndex++; //每次移动的字符串
update();
if (m_curIndex > m_showText.length())
{
m_curIndex = 0;
}
}
}
void SALabel::resizeEvent(QResizeEvent *event)
{
linearGrad.setStart(0,0);
linearGrad.setFinalStop(event->size().width(),0);
linearGrad.setColorAt(0, Qt::black);
linearGrad.setColorAt(1, Qt::red);
}