首页 > 其他分享 >Qt中定时器的所有使用方式

Qt中定时器的所有使用方式

时间:2022-11-21 11:31:47浏览次数:82  
标签:定时器 Qt 方式 int timer QTimer 函数


在Qt中使用定时器一般有三种方式

参考博客:

​Qt | 定时器的使用 - 知乎​

​​QT定时器事件startTimer_谢永奇1的博客-_starttimer​​

​​Qt之定时器_付康为的博客-qt 定时器​​ 

一、直接使用QObject类提供的定时器。

​QObject​​​是所有​​Qt​​对象的​​基类​​,它提供了一个基本的定时器。

1.在需要开启定时器的地方直接调用startTimer();
该函数的声明为:int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
该函数开启一个定时器,返回值是定时器的编号。
参数一为时间间隔,单位毫秒;
参数二为定时器的精确度:
Qt::PreciseTimer(精确的定时器,尽量保持毫秒精度,试图保持精确度在1毫秒);
Qt::CoarseTimer(粗略的定时器,尽量保持精度在所需的时间间隔5%范围内);
Qt::VeryCoarseTimer(很粗略的定时器,只保留完整的第二精度,大约为500毫秒);

2.重载void QObject::timerEvent ( QTimerEvent * event );
当定时器溢出时,会自动响应timerEvent()函数。
在timerEvent()函数中,通过event->timerId()来确定是哪个定时器触发的;

3.在需要关闭定时器的地方调用killTimer();
该函数的声明为: void killTimer(int Id);
该函数关闭一个定时器,参数为定时器的编号。

示例如下:
 

#include <QTimer>

int timerid1;
int timerid2;

timerid1 = startTimer(1000);
timerid2 = startTimer(3000);

void MainWindow::timerEvent(QTimerEvent *e)
{
if(e->timerId()==timerid1)
{
qDebug("timer1");
}
else if(e->timerId()==timerid2)
{
qDebug("timer2");
}

killTimer(timer1);
}

二、使用QTimer类。

1.用new的方式创建一个QTimer对象。
QTimer *timer = new QTimer(this);

2.将定时器的溢出信号连接到自定义的槽函数。
connect(timer, &QTimer::timeout, this, &Myself::update);

3.启动定时器。
timer->start(1000);
函数原型为:void start(int msec);参数为定时器时间间隔,单位毫秒。
也可以调用timer->setInterval(1000);设置定时器时间间隔,然后调用timer->start();开启定时器。

4.停止定时器。
timer->stop();

示例代码如下:
 

// 产生一个定时器
QTimer *timer = new QTimer(this);

//连接这个定时器的信号和槽,利用定时器的timeout(),从而触发clear()槽函数
connect(timer, &QTimer::timeout, this, &MainWindow::fun));

//开始定时器,并设定定时周期,每隔5秒就会重启定时器,会重复触发定时,除非你利用stop()将定时器关掉
timer->start(5000);

// 仅仅启动定时器一次
timer->setSingleShot(true);

三、仅调用一次溢出的定时器。

//这个是静态函数,不用创建对象直接用
QTimer::singleShot(1000, this, SLOT(OnSendBreath()));
函数原型有两个:
1.static void singleShot(int msec, const QObject *receiver, const char *member);
参数一为时间间隔,单位毫秒;参数二为接收溢出信号的对象;参数三为溢出信号的槽函数;
2.static void singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member);
参数一为时间间隔,单位毫秒;参数二为定时器的精确度(同上文);参数三为接收溢出信号的对象;参数四为溢出信号的槽函数。

示例代码如下:

QTimer::singleShot (100, this, SLOT (onTimeout()));

附录:

一些常用函数:
1. 判断定时器是否正在运行:bool QTimer::isActive () const

//如果这个定时器正在运行,他将被停止并且重新开始,否则将会被开始。
2. 改变定时器的时间间隔:void QTimer::changeInterval ( int msec )

标签:定时器,Qt,方式,int,timer,QTimer,函数
From: https://blog.51cto.com/u_13682052/5873196

相关文章

  • 【Java】JDK5.0新增的创建多线程的方式:实现Callable接口,使用线程池
    1.实现Callable接口方式和实现Runnable接口相比call()可以有返回值。call()可以抛出异常,被外面的操作捕获,获取异常信息。Callable是支持泛型的。实现Callable接口......
  • 为什么工业软件开发一般用的都是QT?
    这个说法不大准确吧,CAD、MATLAB、EDA、PRO-E、Proteus、POWERPCB是用的QT么?SAP、EBS(ORACLE)、LabView是用的QT么?西门子的工业控制类的软件(比如SIMATICSCADA)用的QT么?这些都......
  • MQTT生产实践总结与EMQX5.0探索
     引言之前做了一个系统,系统的一部分硬件设备是使用MQTT协议接入的,无奈只好去研究它。好不容拼凑出一套能用的代码,上生产以后频频出现故障,后来稀里糊涂的解决了,但是一直......
  • 【java技术总结】将中文通过ISO-8859-1方式编码传输
    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样!String.getBytes(Stringdecode)方法会根据指定的de......
  • LinkedList底层 和 实现LIst接口 3种遍历方式
       底层!    底层2.0(删除)  实现LIst接口3种遍历方式 ......
  • Linux切换账户(或ssh远程)执行QT程序无法输入中文
    系统:银河麒麟前提条件:已经安装了fcitx插件,因为QTcreator本身不支持中文输入,需要插件支持;场景1:一台计算机;使用普通用户(例如:user01)登录并打包一个可以执......
  • pyqt5图形化界面程序打包成exe可执行文件
    1.pipinstallpyinstaller2.打开命令行目录转到项目的所在目录下  3.打包主程序文件  pyinstaller-F-wmain.py。当前目录下会生成build,dist文件夹和main.spe......
  • vs+qt静态编译环境配置
    一、简述Qt官方提供二进制安装包+vs开发环境默认只能通过动态编译。可以通过Qt提供工具Windeployqt把相关qt依赖dll复制到当前目录(但是会有windows系统提供dll不能关联,所以......
  • 学习Cortex-M:三种关中断方式
    1、关闭整个CPU的所有中断;2、关闭特定外设的所有中断;3、关闭特定外设的特定中断源。mingdu.zhengatgmaildotcom1、总开关每个CPU有一个中断总开关。通过CPU中断控制寄存......
  • mac安装nacos方式二
    1、去gitlub上拉取nacos的文件包以命令行的形式去启动2、用户docker安装nacos进行启动下面方式存在一个问题mac出现xxx.alibaba.xx包notfound可以使用 https://blog.......