Прокрутка текста (Marquee) в QLabel

Я изучаю WidgetMarqueeLabelкласс:

#include "WidgetMarqueeLabel.h"
#include 
#include 

WidgetMarqueeLabel::WidgetMarqueeLabel(QWidget *parent)//*parent)
{   
        px = 0;
        py = 10;
        speed = 1;
        direction = RightToLeft;
        connect(&timer3, SIGNAL(timeout()), this, SLOT(refreshLabel()));
        timer3.start(10);
}

void WidgetMarqueeLabel::refreshLabel()
{
    repaint();  
}

WidgetMarqueeLabel::~WidgetMarqueeLabel()
{}

void WidgetMarqueeLabel::show()
{   
    QLabel::show();
}

void WidgetMarqueeLabel::setAlignment(Qt::Alignment al)
{
    m_align = al;
    updateCoordinates();
    QLabel::setAlignment(al);
}

void WidgetMarqueeLabel::paintEvent(QPaintEvent *evt)
{
    QPainter p(this);
    if(direction==RightToLeft)
    {
        px -= speed;
        if(px <= (-textLength))
            px = width();
    }
    else
    {
        px += speed;
        if(px >= width())
            px = - textLength;
    }
        p.drawText(px, py+fontPointSize, text());
    p.translate(px,0);
}

void WidgetMarqueeLabel::resizeEvent(QResizeEvent *evt)
{   
    updateCoordinates();
    QLabel::resizeEvent(evt);
}

void WidgetMarqueeLabel::updateCoordinates()
{
    switch(m_align)
    {
        case Qt::AlignTop:
            py = 10;
            break;
        case Qt::AlignBottom:
                        py = height()-10;
            break;
        case Qt::AlignVCenter:
            py = height()/2;
            break;
    }
    fontPointSize = font().pointSize()/2;
    textLength = fontMetrics().width(text());
}

void WidgetMarqueeLabel::setSpeed(int s)
{
    speed = s;
}

int WidgetMarqueeLabel::getSpeed()
{
    return speed;
}

void WidgetMarqueeLabel::setDirection(int d)
{
    direction = d;
    if (direction==RightToLeft)
        px = width() - textLength;
    else
        px = 0;
    refreshLabel();
}

void WidgetMarqueeLabel::close()
{
        QLabel::close();
}

Мне было интересно, можно ли сделать так, чтобы текст снова появлялся перед текстом, который доходит до конца последней буквы справа. Я хочу что-то вроде этого: например (пробелы 25):

WidgetMarqueeLabel
tMarqueeLabel                         Widge
eLabel                         WidgetMarque
el                          WidgetMarqueeLa
                      WidgetMarqueeLabel
               WidgetMarqueeLabel
       WidgetMarqueeLabel
WidgetMarqueeLabel

Возможно ли это?

5
задан Afriza N. Arief 19 September 2019 в 04:33
поделиться