QT QTimer定时器
一、简述
记--QTimer定时器的简单使用例子。
例子1:链接: https://pan.baidu.com/s/1Om3-Tvsj8r8gapzOv2NbbQ 提取码: adx6
例子2:链接: https://pan.baidu.com/s/1GTNSlN6p8Q0eHDnrZiqJVg 提取码: faxa
二、例子1
2.1 效果:
2.2 工程结构
布局:
2.3 源文件
QTimerDemo.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QTimerDemo
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QTimer *timer;//定时器
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_btnDownload_clicked();//按钮点击响应的槽函数
void updateProgressValue();//更新进度条的值槽函数
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>//消息框
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);//创建定时器
timer->setInterval(1000);//设置间隔时间(每1000ms=1s,触发一个timeout()信号)
connect(timer, SIGNAL(timeout()), this, SLOT(updateProgressValue()));
ui->progressBar->setMinimum(0);//设置进度条的最小值为0
ui->progressBar->setMaximum(100);//设置进度条的最大值为100
ui->progressBar->setValue(0);//设置进度条的当前值
}
MainWindow::~MainWindow()
{
delete timer;//销毁定时器
delete ui;
}
void MainWindow::updateProgressValue()//定时时间到,更新进度条的值
{
int value = ui->progressBar->value();//获取当前进度条的值
value += 10;
if(value >= 100)//值>=100表示下载完成,并弹出消息框提示用户
{
ui->progressBar->setValue(100);//更新进度条的值
QMessageBox::about(this, "下载信息", "下载完成!");
ui->btnDownload->setText("重新下载");
timer->stop();//关闭定时器
}
else
{
ui->progressBar->setValue(value);//更新进度条的值
}
}
void MainWindow::on_btnDownload_clicked()//下载 按钮
{
if(timer->isActive())//如果定时器已经开启就关闭
{
timer->stop();//关闭定时器
ui->btnDownload->setText("继续");
}
else//定时器还没有开启
{
if(ui->progressBar->value() >= 100)
{
ui->progressBar->setValue(0);//重置进度条的值
}
timer->start();//开启定时器
ui->btnDownload->setText("暂停");
}
}
三、例子2
3.1 效果:
3.2 工程结构
布局:
3.3 源文件
QTimerDemo2.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QTimerDemo2
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
RESOURCES += \
res.qrc
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
int index;//记录显示的是哪一张图片
QStringList *list;//存放图片的路径
QTimer *timer;//定时器
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_btnPlay_clicked();//放映按钮的点击响应函数
void changePicture();//当定时器时间到,执行的函数
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
index = 0;
timer = new QTimer(this);
timer->setInterval(1000);//设置定时间隔时间为1000ms=1s
connect(timer, SIGNAL(timeout()), this, SLOT(changePicture()));//timer定时器时间到发出timeout信号,当前对象收到信号后执行槽函数changePicture()
list = new QStringList();//创建字符串集合
list->append(":/res/imgs/wuya.png");
list->append(":/res/imgs/yonghuai.png");
list->append(":/res/imgs/chengxiang.png");
list->append(":/res/imgs/zagang.png");
// QPixmap pixmap("D:\\QtProj\\QTimerDemo2\\imgs\\yonghuai.png");//加载图片方式1
//QPixmap pixmap(":/res/imgs/yonghuai.png");//加载资源文件图片,方式2
QPixmap pixmap(list->at(index));//
ui->labelPic->setPixmap(pixmap);//将图片设置到label上
}
MainWindow::~MainWindow()
{
delete timer;
delete ui;
}
void MainWindow::changePicture()
{
index++;
if(index >= 4)
{
index = 0;
}
QPixmap pixmap(list->at(index));//
ui->labelPic->setPixmap(pixmap);//将图片设置到label上
}
void MainWindow::on_btnPlay_clicked()//放映按钮的点击响应函数
{
if(timer->isActive())//如果定时器已经开启就关闭
{
timer->stop();//关闭定时器
ui->btnPlay->setText("放映");
}
else//定时器还没有开启
{
timer->start();//开启定时器
ui->btnPlay->setText("暂停");
}
}
四、总结
1、QTimer定时器的基本操作
包含文件:#include <QTimer>
QTimer timer = new QTimer(this);//创建定时器对象
timer->setInterval(1000);//设置定时间隔时间为1000ms=1s
//定时时间到会触发timeout信号
//连接信号与槽函数,timer定时器时间到发出timeout信号,当前对象收到信号后执行槽函数changePicture()
connect(timer, SIGNAL(timeout()), this, SLOT(changePicture()));
timer->isActive();//当前定时器的状态,如果定时器已经开启就返回true
timer->start();//开启定时器
timer->stop();//关闭定时器
详细用法:
2、引用资源文件中的图片并使用QLabel显示图片
资源文件的路径:
引用: