Qt字幕循环滚动,QTextView


QTextView::QTextView(QWidget *parent) :
    QWidget(parent)
{

        timer = new QTimer(this);

        connect(timer,SIGNAL(timeout()), this, SLOT(updateIndex()));

        m_curIndex = 0;
        pen.setWidth(5);
        pen.setColor(QColor(0,255,0));
        setText("众芳摇落独暄妍,占尽风情向小园。疏影横斜水清浅,暗香浮动月黄昏。霜禽欲下先偷眼,粉蝶如知合断魂。幸有微吟可相狎,不须擅板共金樽。");
        m_font.setPixelSize(20);
    setMinimumHeight(30);
}
void QTextView::setPen(){

 
}

 
void QTextView::paintEvent(QPaintEvent * e){
    if(width!=e->rect().width()){
        width = e->rect().width();
        setText(text);
    }
    QPainter pp(this);
    pp.fillRect(0,0,e->rect().width(),e->rect().height(),QColor(0,0,0));
    pp.setPen(pen);
    pp.setFont(m_font);
    QFontMetrics fm(m_font);
    int len = text_len-m_curIndex;
    if(len<width&&text_len>width){
        pp.drawText(-m_curIndex, height()-10,text);
        pp.drawText(len+20, height() - 10, text);
    }
    else{
        pp.drawText(-m_curIndex, height()-10,text);
    }
}

 
void QTextView::setText(QString t){
    QFontMetrics fm(m_font);
    text_len = fm.width(t);//每个字符的宽度
    text = t;
    if(text_len>width){
        if(!timer->isActive())
            timer->start(12);
    }
    else{
        if(timer->isActive())
            timer->stop();
    }
    update();
}

 
void QTextView::updateIndex(){
        m_curIndex+=0.5;
        int len = text_len>width?text_len:width;
        if (m_curIndex > len+20)
            m_curIndex = 0;
        update();
}

 
QTextView::~QTextView(){
    if(timer->isActive())
        timer->stop();
    delete timer;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值