我尝试让 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
答案 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++;
}