qt之实现字体滚动效果

image


class QRollLabel:public QLabel
{
    Q_OBJECT

public:
    QRollLabel(QWidget *parent=nullptr):QLabel(parent){

        mRollingText="我不是萧海哇111111111111111111111111111";
        setText(mRollingText);
        resize(300,150);

        QFontMetrics fm(this->font()); // 使用当前widget的字体

       mTextWidth = fm.horizontalAdvance(mRollingText); // 推荐使用这个


        QTimer *t=new QTimer(this);
        connect(t,&QTimer::timeout,[=](){

            mPosx-=10;
            update();
            if(mPosx<=-mTextWidth){
                mPosx=mTextWidth;
            }
        });
        t->start(100);
    }

    void paintEvent(QPaintEvent *event){

        QPainter painter(this);


        //           if(isRolling && autoRolling)
        {
            if(!mRollingText.isEmpty())
            {
                painter.drawText(QRect(mPosx,0,mTextWidth,30),Qt::AlignLeft,mRollingText);
            }
        }
        //           else
        //           {
        //               painter.drawText(QRect(0,0,this->width(),30),mAlignment,mRollingText);
        //           }


    }
private:
    QString mRollingText;
    int mTextWidth=100;
    int mPosx=0;
};

posted @ 2025-09-07 17:08  我不是萧海哇~~~  阅读(23)  评论(0)    收藏  举报