使用QTimer::singleShot定义一个信号与槽:
QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
这里的意思是等待1秒过后,触发timeoutSlot()这个函数。(当然这句不是我写的是我从别人拿拿来学习的)
使用的地方:
void Widget::on_onceButton_clicked()
{
QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
}
在h文件中:
public:
Widget(QWidget *parent = nullptr);
void timeoutSlot();
在cpp文件中:
void Widget::timeoutSlot()
{
QString path("C:\\Qt\\QtCode\\test3\\");
path += QString::number(picID);
path += ".jpg";
QImage img;
img.load(path);
ui->label->setPixmap(QPixmap::fromImage(img));
picID++;
if(picID==5)
picID=1;
}
但是 运行时终端上会显示:
QObject::connect: No such slot Widget::timeoutSlot() in ..\test2\widget.cpp:49
QObject::connect: (receiver name: 'Widget')
大家帮看看 会是什么原因呢
=========================================
下面我把两个文件的源码贴上来:
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#define TIMEOUT 1*1000
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
void timeoutSlot();
~Widget();
private slots:
void on_startButton_clicked();
void on_stopButton_clicked();
void on_onceButton_clicked();
private:
Ui::Widget *ui;
QTimer *timer;
int picID;
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer;
picID=2;
QImage img;
img.load("C:\\Qt\\QtCode\\test3\\1.jpg");
ui->label->setPixmap(QPixmap::fromImage(img));
connect(timer, &QTimer::timeout, this, &Widget::timeoutSlot);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_startButton_clicked()
{
timer->start(TIMEOUT);
}
void Widget::timeoutSlot()
{
QString path("C:\\Qt\\QtCode\\test3\\");
path += QString::number(picID);
path += ".jpg";
QImage img;
img.load(path);
ui->label->setPixmap(QPixmap::fromImage(img));
picID++;
if(picID==5)
picID=1;
}
void Widget::on_stopButton_clicked()
{
timer->stop();
}
void Widget::on_onceButton_clicked()
{
QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
}