当前位置: 代码网 > it编程>编程语言>C/C++ > 【QT】定时器事件 - QTimerEvent & QTimer

【QT】定时器事件 - QTimerEvent & QTimer

2024年07月28日 C/C++ 我要评论
qt 系统定时器 --- QTimerEvent (描述⼀个定时器事件)、QTimer (实现⼀个定时器)、QDateTime (通过和QTimer一起使用获取系统的日期及实时时间)

定时器

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 <qtimer>
			
			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 <qtimer>
			#include <qdatetime>
			
			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);
			}

实现的效果如下:

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com