如何设置计时器以更改 Qt 中标签中的图片
How can I set timer in order to change the picture in the label in Qt
我正在尝试将时间间隔后的标签中的图片更改为12s。但它不会工作,任何人都可以帮忙!附上代码。另外,由于图片比较大,所以不能用QVector< QPixmap > picArray
来存储图片。
有什么办法可以实现我的愿望吗?
感谢您的帮助!
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QMouseEvent>
#include <QVector>
#include <QPixmap>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void mouseMoveEvent(QMouseEvent *event);
void update();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QVector<QPixmap> picArray;
QTimer *timer;
int picCounter;
int timerInterval;
};
#endif // MAINWINDOW_H
这是 mainwindow.h
的代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setStyleSheet("QLineEdit {color: white;}");
setMouseTracking(true);
ui->centralWidget->setMouseTracking(true);
timer = new QTimer;
picCounter = 0;
timerInterval = 12000;
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(timerInterval);
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
setMouseTracking(true);
ui->lineEdit->setText(QString(tr("move to:(%1, %2)")).arg(QString::number(event->x()), QString::number(event->y())));
}
void MainWindow::update()
{
timer->setInterval(timerInterval);
QPixmap p0(":/movies/ralph.png");
QPixmap p1(":/movies/polis.png");
QPixmap p2(":/movies/robin.png");
if (picCounter == 0)
{
ui->label_2->setPixmap(p0);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
else if (picCounter == 1)
{
ui->label_2->setPixmap(p1);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
else if (picCounter == 2)
{
ui->label_2->setPixmap(p2);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
// update picture
picCounter++;
if (picCounter == 3)
picCounter = 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
这是mainwindow.cpp的代码,图片存放在资源文件(qrc)下
希望得到一些帮助!非常感谢!
我在你的代码中发现了一些东西..
1st,计时器正在工作,但您没有收到通知,因为您的插槽 update() 未在 header 中定义为插槽,而是定义为方法,
另一方面,我觉得你的代码不完整,你也需要实现 on_pushButton_clicked 插槽...
解决这个问题,定时器将被调用,但就像信息一样,您不需要再次设置间隔
timer->setInterval(timerInterval);
每次计时器超时...自从您在构造函数中设置该值后,该值根本不会改变...
我正在尝试将时间间隔后的标签中的图片更改为12s。但它不会工作,任何人都可以帮忙!附上代码。另外,由于图片比较大,所以不能用QVector< QPixmap > picArray
来存储图片。
有什么办法可以实现我的愿望吗?
感谢您的帮助!
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QMouseEvent>
#include <QVector>
#include <QPixmap>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void mouseMoveEvent(QMouseEvent *event);
void update();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QVector<QPixmap> picArray;
QTimer *timer;
int picCounter;
int timerInterval;
};
#endif // MAINWINDOW_H
这是 mainwindow.h
的代码#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setStyleSheet("QLineEdit {color: white;}");
setMouseTracking(true);
ui->centralWidget->setMouseTracking(true);
timer = new QTimer;
picCounter = 0;
timerInterval = 12000;
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(timerInterval);
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
setMouseTracking(true);
ui->lineEdit->setText(QString(tr("move to:(%1, %2)")).arg(QString::number(event->x()), QString::number(event->y())));
}
void MainWindow::update()
{
timer->setInterval(timerInterval);
QPixmap p0(":/movies/ralph.png");
QPixmap p1(":/movies/polis.png");
QPixmap p2(":/movies/robin.png");
if (picCounter == 0)
{
ui->label_2->setPixmap(p0);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
else if (picCounter == 1)
{
ui->label_2->setPixmap(p1);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
else if (picCounter == 2)
{
ui->label_2->setPixmap(p2);
ui->label_2->setScaledContents(true);
ui->label_2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
// update picture
picCounter++;
if (picCounter == 3)
picCounter = 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
这是mainwindow.cpp的代码,图片存放在资源文件(qrc)下
希望得到一些帮助!非常感谢!
我在你的代码中发现了一些东西..
1st,计时器正在工作,但您没有收到通知,因为您的插槽 update() 未在 header 中定义为插槽,而是定义为方法,
另一方面,我觉得你的代码不完整,你也需要实现 on_pushButton_clicked 插槽...
解决这个问题,定时器将被调用,但就像信息一样,您不需要再次设置间隔
timer->setInterval(timerInterval);
每次计时器超时...自从您在构造函数中设置该值后,该值根本不会改变...