QLabel像视频一样显示图像

时间:2019-01-23 08:22:03

标签: c++ qt5 qimage qlabel

我尝试让 QLabel 将图像显示为视频。

我希望它缓慢显示从f0000.png到f0039.png的图像,以便我能看到进度。

出于某种原因,我的for循环从50开始。

当我看到程序运行时,它只显示一张图像,或者它变化太快,所以看不到进度。

如何修复它,使其显示视频图像。

这是我的代码

for(int i=50;i<89;i++)
{
            QString img=":/images/f0000.png";
            //qDebug()<<img<<endl;
            if(i>=50 && i<=59)
            {
                img.data()[12]='0';
                img.data()[13]=char('0'+(i-50));
            }//end if
            else if(i>=60 && i<=89)
            {
                img.data()[12]=char('0'+((i-50)/10));
                img.data()[13]=char('0'+((i-50)%10));
            }//end else if
            //qDebug()<<img<<endl;
            QImage tmp(m_ui->label_LCD->pixmap()->toImage());
            QImage image(img);
            QPainter painter(&tmp);
            painter.drawImage(0,0,image);

            m_ui->label_LCD->setPixmap(QPixmap::fromImage(tmp));
}//end for loop

1 个答案:

答案 0 :(得分:2)

您可以使用Qtimer并根据需要设置速度

标题:

#include <QMainWindow>
#include <QTimer>

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow() override;

public slots:
    void updateLabel();

private:
    Ui::MainWindow *ui;
    QTimer* _timer;
    int index{0};
    QString pixResource{};
};

和隐含

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    _timer = new QTimer(parent);
    connect(_timer, SIGNAL(timeout()), this, SLOT(updateLabel()));
    _timer->start(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
    _timer->stop();
    delete _timer;
}

void MainWindow::updateLabel()
{
    if (index >= 10)
    {
        index = 0;
    }
    qDebug() << "index: " << index;
    pixResource = "res/foo/image/" + QString::number(index)  + ".png";
    qDebug() << "now the res: " << pixResource;
    index++;
}