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(50);
    }
    else{
        if(timer->isActive())
            timer->stop();
    }
    update();
}

 
void QTextView::updateIndex(){
        m_curIndex++;
        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;
}

 

猜你喜欢

转载自blog.csdn.net/qq_16778399/article/details/82015116