Qt自定义QLabel,设置背景颜色,文字颜色,文字滚动

该代码定义了一个TextTicker类,继承自QLabel,用于创建文本滚动效果。类中包含了字符宽度计算、定时器更新索引以及自定义绘制事件以实现文本左右移动。初始化时设置显示文本和定时器,定时器触发updateIndex方法,更新当前显示的文本位置。
摘要由CSDN通过智能技术生成
#include <QLabel>
 2 
 3 class TextTicker : public QLabel
 4 {
 5     Q_OBJECT
 6 
 7 
 8 public:
 9     TextTicker(QWidget *parent = nullptr);
10     ~TextTicker();
11 
12 
13 protected:
14     void paintEvent(QPaintEvent *);
15     void updateIndex();
16 
17 private:
18     int m_charWidth; //字符串宽度
19     int m_curIndex;
20     QString m_showText; //需要显示的字符串
21 public:
22 
23     QString getText()
24     {
25         return  m_showText;
26     }
27 };
#include <QPainter>
#include <QTimer>
 
 
TextTicker::TextTicker(QWidget *parent)
    : QLabel(parent)
{
 
    m_curIndex = 0;//当前文字下标值
    m_showText = tr("不想学Qt");//显示的文字
 
 
    m_charWidth = fontMetrics().width("a");//每个字符的宽度
 
 
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &TextTicker::updateIndex);
    timer->start(500);
}
 
 
TextTicker::~TextTicker()
{
 
 
}
 
 
void TextTicker::paintEvent(QPaintEvent *)
{
    QPen pen;
    pen.setColor(QColor(255,0,255));
 
       pen.setStyle(Qt::DashDotDotLine);
 
       QFont font("楷体",14,QFont::Bold);
 
        
    QPainter painter(this);
    painter.setPen(pen);
 
    painter.setFont(font);
    
		QPalette palette;
    palette.setColor(QPalette::Background,QColor(1,1,1));
    setAutoFillBackground(true);
    setPalette(palette);

    painter.drawText(0, 15, m_showText.mid(m_curIndex));
    painter.drawText(width() - m_charWidth*m_curIndex, 15, m_showText.left(m_curIndex));
}
 
 
void TextTicker::updateIndex()
{
    update();
    m_curIndex++;
    if (m_curIndex*m_charWidth > width())
        m_curIndex = 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值