Qt提供了定时器类QTimer, 在使用时需要包含头文件
#include
QTimer类方法介绍:
- void start(int msec); 开启定时器,定时间隔的msec毫秒
- void stop(); 结束定时
QTimer信号:
- void timeout(QPrivateSignal); 在链接定时器时,需要绑定该信号
下面介绍如何使用Qt定时器实现一个秒表。 新建一个Qt MainWindow项目,界面如下: 时间的显示用的LCD控件 QLCDNumber
运行效果
MainWindow 头文件代码:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btnStart_clicked();
void on_btnStop_clicked();
void on_btnContinue_clicked();
void on_timer();
private:
Ui::MainWindow *ui;
QTimer *m_pTimer;
int m_counts = 0; //时间计数
};
#endif // MAINWINDOW_H
在头文件定义了定时器对象指针m_pTimer,毫秒计数m_counts
MainWindow cpp代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//LCD控件,需要先设置显示的数字个数,再显示数字,不然显示不全
ui->lcdNumber->setDigitCount(9);
ui->lcdNumber->display("00:00:000");
//new QTimer, 设置定时器类型
m_pTimer = new QTimer(this);
m_pTimer->setTimerType(Qt::PreciseTimer);
//链接定时器信号timeout,当调用start时,触发槽函数on_timer
connect(m_pTimer, &QTimer::timeout, this, &MainWindow::on_timer);
}
MainWindow::~MainWindow()
{
delete ui;
}
//开始计时
void MainWindow::on_btnStart_clicked()
{
m_pTimer->start(1); //开启定时器,频率为1ms
m_counts = 0;
}
//暂停计时
void MainWindow::on_btnStop_clicked()
{
m_pTimer->stop();
}
//继续计时
void MainWindow::on_btnContinue_clicked()
{
m_pTimer->start(1);
}
void MainWindow::on_timer()
{
m_counts++;
char buf[64];
if(m_counts 1000 && m_counts lcdNumber->display(buf);
}
需要注意的是,QTimer可以设置类型,也就是调用setTimerType进行设置,QTimer声明的定时器类型如下:
enum TimerType {
PreciseTimer,
CoarseTimer,
VeryCoarseTimer
};
这三种什么意思呢,Qt助手的解释如下:
- Qt::PreciseTimer 精确的计时器试图保持毫秒的精确度
- Qt::CoarseTimer 粗计时器试图将精度保持在所需间隔的5%以内
- Qt::VeryCoarseTimer 非常粗糙的计时器只能保持完全的秒精度
在new QTimer时,可以根据需求设置定时器精度。
在UNIX(包括Linux, macOS和iOS)上,Qt将保持毫秒精度的Qt::PreciseTimer。对于Qt::CoarseTimer,间隔将被调整至5%,以使计时器与其他预期在或大约在同一时间触发的计时器对齐。目标是让大多数计时器在同一时间唤醒,从而减少CPU唤醒和功耗。
在Windows上,Qt将使用Windows的多媒体定时器工具(如果可用)用于Qt::PreciseTimer和普通的Windows定时器用于Qt::CoarseTimer和Qt::VeryCoarseTimer。
在所有平台上,Qt::VeryCoarseTimer的间隔被舍入到最近的满秒(例如,23500ms的间隔将被舍入到24000ms, 20300ms将被舍入到20000ms)。
QTimer::singleShot使用说明QTimer除了周期性的执行某种操作,还可以单次执行,QTimer的静态函数singleShot就是为了实现这种单次操作功能,singleShot在一个给定时间间隔 msec(毫秒) 之后调用一个槽,例如下面的代码:
void MainWindow::on_pushButton_clicked()
{
QTimer::singleShot(3000,this,[=]{
//想要执行的代码
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?