QT5 -定时器简单应用-样例讲解-实现方式1-定时器事件方式
- 1、前言
- 2、实验环境
- 3、定时器实现方式说明-以及效果
- 3、操作步骤-(1)定时器事件方式
- (1)建立工程
- (2)拉控件布局
- (3)代码部分编写
- 4、操作步骤-(2)定时器绑定函数
- (1)建立工程
- (2)拉控件布局
- (3)代码部分编写
- 4、样例代码
- 5、细节
- 6、总结
1、前言
最近回忆了一下QT使用定时器,以前作为初学者,碰到使用定时器都是懵的,完全不知道是什么,如何使用,现在会使用了,一方面想将其记录下来,另一方面也算是为后来初学者铺平道理。
自己的一点想法:
1:我们很多时候做什么东西,或者学习什么东西,都不是先学会再去做的,要真是那样,黄瓜菜都凉了,大部分时候,我们都是在网上找样例,边学边做,就像本篇要说的定时器,我最开始先找到样例,不知道为什么那么做,做完后,才去了解内部逻辑,一点点认识自己使用的东西。
2:需要做一些说明的是,我认为这是实现的一种方式,代码编写的不同,可以有其他实现途径。
2、实验环境
实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2
3、定时器实现方式说明-以及效果
本篇也算是自己的总结吧,定为两种定时器实现方式,一种是使用系统提供的定时器事件函数的方式,另一种是用定时器绑定函数,时间到了就执行函数,甚至自己定执行时间。
两种方式没有完全优劣之分,看你怎么使用,甚至可用混用,它们各有特定。
(1)定时器事件方式
功能效果如下,点击第一个按键,一秒一次计数,并将计数显示出来,到10后再会到0.
(2)定时器绑定函数
功能效果如下,输入定时器周期后,点击自动计数,便开始累加,加到100后自动回到0,
3、操作步骤-(1)定时器事件方式
(1)建立工程
再复杂的工程,也要地基,新建一个工程,这里并不截取全部图了,在其他文章有说的。
运行一下,保证没错误。
(2)拉控件布局
(1)选择ui文件
(2)拉取>>>按钮和label控件
(3)设置布局
(4)修饰与文字
修饰如下
(5)转到槽
选择第一个函数
(6)更细节的话请直接看代码吧
(3)代码部分编写
(1)本次样例也算是比较简单,主要是mainwindow.h和mainwindow.cpp两个文件内,如下图。
具体代码也贴到下面了,或者拿代码样例,直接拿整个工程>>mainwindow.h。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//第一步包含头函数
#include <qtimer.h>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//第二步:声明定时器函数与对应ID
void timerEvent(QTimerEvent *);
int timer_id1,timer_id2,timer_id3,timer_id4;
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
(2)在mainwindow.cpp内实现定时器事件函数的功能部分。
具体代码也贴到下面了,或者拿代码样例,直接拿整个工程。
#include "mainwindow.h"
#include "ui_mainwindow.h"
//第四部:引入标志位和计数
bool pushbutton_start_falg=false;
bool pushbutton_start_falg1=false;
int display_num=0;
int display_num1=0;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//第三步:填入定时器开始计时,计时时间
timer_id1 = startTimer(300); //300ms
timer_id2= startTimer(400); //400ms
timer_id3 = startTimer(1000); //1秒
timer_id4 = startTimer(2000); //2秒
}
MainWindow::~MainWindow()
{
delete ui;
}
//第六步:在对应定时器ID内编写功能函数。
void MainWindow::timerEvent(QTimerEvent *event)
{
//判定时那个定时器
if(event->timerId()== timer_id1)
{
}
if(event->timerId()== timer_id2)
{
}
if(event->timerId()== timer_id3)
{
//计数并且显示数值
if(pushbutton_start_falg==true)
{
display_num++;
ui->label->setNum(display_num);
}
if(display_num>=10)
{
pushbutton_start_falg=false;
display_num=0;
ui->label->setNum(display_num);
}
}
if(event->timerId()== timer_id4)
{
//计数并且显示数值
if(pushbutton_start_falg1==true)
{
display_num1=display_num1+2;
ui->label->setNum(display_num1);
}
if(display_num1>=20)
{
pushbutton_start_falg1=false;
display_num1=0;
ui->label->setNum(display_num1);
}
}
}
//第五步:布局完成后,添加按键功能函数
void MainWindow::on_pushButton_clicked()
{
pushbutton_start_falg=true;
}
void MainWindow::on_pushButton_2_clicked()
{
pushbutton_start_falg1=true;
}
4、操作步骤-(2)定时器绑定函数
(1)建立工程
同3一样的,新建工程,这里就不重复叙述了,最后效果,就是有个空模板。
(2)拉控件布局
(1)拉取控件,label checkBox和 lineEdit
(2)布局
(3)样式
(4)checkbox 转到槽函数
选择带bool的。
(5)更为细节请看代码吧
(3)代码部分编写
(1)代码的话,也主要是mainwindow.h和mainwindow.cpp两个文件内,如下图。
具体代码片段:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//第一步:包含头文件
#include <qtimer.h>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//第二步:声明
QTimer *auto_timer1;
QTimer *auto_timer2;
void fnNum_auto_increase();
private slots:
void on_checkBox_clicked(bool checked);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
(2)mainwindow.cpp文件内,如下图。
具体代码片段
#include "mainwindow.h"
#include "ui_mainwindow.h"
//第三步:计数变量
int auto_num=0;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//第5步:连接
auto_timer1=new QTimer(this);
connect(auto_timer1,&QTimer::timeout,this,&MainWindow::fnNum_auto_increase);
}
MainWindow::~MainWindow()
{
delete ui;
}
//第4步:功能函数编写
void MainWindow::fnNum_auto_increase()
{
auto_num++;
ui->label->setNum(auto_num);
if(auto_num>100)
{
auto_num=0;
}
}
//第6步:生成函数
void MainWindow::on_checkBox_clicked(bool checked)
{
int sendPeriod=ui->lineEdit->text().toInt();
if(checked)
{
auto_timer1->start(sendPeriod);
}
else {
auto_timer1->stop();
}
}
4、样例代码
(1)定时器事件方式:
https://download.csdn.net/download/qq_22146161/87406848
(2)定时器绑定函数:
https://download.csdn.net/download/qq_22146161/87406850
5、细节
6、总结
有人说,查看自己学没学会,就看你会不会将这些知识教给他人,希望这篇对你学习有所帮助吧。