【QT】定时器事件 - QTimerEvent & QTimer
创始人
2024-11-04 15:08:30

qt 系统 - 定时器

  • 定时器
    • 1. QTimerEvent
    • 2. QTimer
    • 3. 获取系统日期及时间

定时器

Qt 中在进行窗口程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀个任务。定时器在很多场景下都会使⽤到,如弹窗⾃动关闭之类的功能等。

Qt 中的定时器分为 QTimerEventQTimer 这2个类。

  • QTimerEvent 类用来描述⼀个定时器事件。在使用时需要通过 startTimer() 函数来开启⼀个定时器,这个函数需要输⼊⼀个以毫秒为单位的整数作为参数来表明设定的时间,它返回的整型值代表这个定时器。当定时器溢出时(即定时时间到达)就可以在 timerEvent() 函数中获取该定时器的编号来进行相关操作。
  • QTimer 类来实现⼀个定时器,它提供了更高层次的编程接口,如:可以使用信号和槽,还可以设置只运行一次的定时器。

1. QTimerEvent

示例代码1: 在UI界⾯上放置两个 Label 控件,⼀个让其1秒数字累加⼀次,⼀个让其2秒数字累加⼀次。

1、新建项⽬,在UI界⾯⽂件放置两个 Label 控件:

在这里插入图片描述

2、在 “widget.h” 头⽂件中声明 timerEvent() 函数,并定义两个整型变量 timer_id1timer_id2

				class Widget : public QWidget 				{ 				    Q_OBJECT 				 				public: 				    Widget(QWidget *parent = nullptr); 				    ~Widget(); 				     				    // 重写定时器事件 				    void timerEvent(QTimerEvent* event); 				 				private: 				    Ui::Widget *ui; 				     				    int timer_id1 = 0; 				    int timer_id2 = 0; 				}; 

3、在 “widget.cpp” ⽂件中重写 timerEvent() 函数;

			Widget::Widget(QWidget *parent) 			    : QWidget(parent) 			    , ui(new Ui::Widget) 			{ 			    ui->setupUi(this); 			 			    // 启动定时器 			    timer_id1 = startTimer(1000); 			    timer_id2 = startTimer(2000); 			} 			 			void Widget::timerEvent(QTimerEvent *event) 			{ 			    if(event->timerId() == timer_id1) { 			        static int num1 = 1; 			 			        // lb1 每隔1秒加一次 			        ui->lb1->setText(QString::number(num1++)); 			    } 			 			    if(event->timerId() == timer_id2) { 			        static int num2 = 1; 			 			        // lb2 每隔2秒加一次 			        ui->lb2->setText(QString::number(num2++)); 			    } 			} 

效果如下:

在这里插入图片描述

2. QTimer

代码示例: 在UI界⾯放置⼀个 Label 标签,两个按钮,分别是 “开始” 和 “停⽌” ,当点击 “开始” 按钮时,开始每隔1秒计数⼀次,点击 “停⽌” 按钮时,暂停计数。

1、设计 UI 界⾯如下:

在这里插入图片描述

2、在 “widget.cpp” ⽂件中实现对应功能;

			#include "widget.h" 			#include "ui_widget.h" 			#include  			 			Widget::Widget(QWidget *parent) 			    : QWidget(parent) 			    , ui(new Ui::Widget) 			{ 			    ui->setupUi(this); 			 			    QTimer* time = new QTimer(this); 			 			    connect(ui->btn1, &QPushButton::clicked, [=](){ 			        time->start(1000); 			    }); 			 			    connect(time, &QTimer::timeout, [=](){ 			        static int num = 1; 			        ui->label->setText(QString::number(num++)); 			    }); 			 			    connect(ui->btn2, &QPushButton::clicked, [=](){ 			        time->stop(); 			    }); 			} 

实现效果如下:

在这里插入图片描述

3. 获取系统日期及时间

在 Qt 中,获取系统的日期及实时时间可以通过 QTimer 类 和 QDateTime类。

QDateTime 类提供了字符串格式的时间。字符串形式的时间输出格式由 toString() 方法中的 format 参数列表决定,可用的参数列表如下:

在这里插入图片描述

代码示例: 获取系统日期及实时时间;

1、设计UI界面文件;放置⼀个 Label 控件,⽤来显示日期及时间,放置两个按钮:“开始” 和 “停止” ;

在这里插入图片描述

2、在 “widget.h” 头⽂件中声明更新时间的槽函数 TimeUpDate();

			class Widget : public QWidget 			{ 			    Q_OBJECT 			 			public: 			    Widget(QWidget *parent = nullptr); 			    ~Widget(); 			 			private: 			    Ui::Widget *ui; 			     			public slots: 			    void TimeUpDate(); 			}; 

3、在 “widget.cpp” ⽂件中实现对应功能;

			#include "widget.h" 			#include "ui_widget.h" 			#include  			#include  			 			Widget::Widget(QWidget *parent) 			    : QWidget(parent) 			    , ui(new Ui::Widget) 			{ 			    ui->setupUi(this); 			 			    QTimer* time = new QTimer(this); 			 			    connect(ui->btn1, &QPushButton::clicked, [=](){ 			        time->start(1000); 			    }); 			 			    connect(ui->btn2, &QPushButton::clicked, [=](){ 			        time->stop(); 			    }); 			 			    connect(time, &QTimer::timeout, this, &Widget::TimeUpDate); 			} 			 			void Widget::TimeUpDate() 			{ 			    QString str = QDateTime::currentDateTime().toString("yyyy-MM-dd hh::mm::ss"); 			    ui->label->setText(str); 			} 

实现的效果如下:

在这里插入图片描述

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...