Qt中定时器的3种实现方法

news/2024/10/18 10:15:26/

一.使用QTimer定时器类(首选)

1.示例代码:

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    ui->setupUi(this);

    time1 = new QTimer();

    time1->setInterval(1000);

    connect(time1,SIGNAL(timeout()),this,SLOT(onTimeOut()));

    time1->start();

}

void MainWindow::onTimeOut()

{

    static int value = 0;

    qDebug()<<"count:"<< value++;

    if(value > 100)

        time1->stop();

}

QTimer类的简单介绍,成员函数:

QTimer::QTimer ( QObject * parent = 0, const char * name = 0 )

构造一个被称作name,父对象为parent的定时器。

QTimer::~QTimer ()

销毁这个定时器。

void QTimer::setInterval ( int msec )

设定定时间隔为msec毫秒。如果这个定时器信号是运行的,它将会被停止并且重新开始,否则它将会被开始。

bool QTimer::isActive () const

如果定时器正在运行,返回真,否则返回假。

void QTimer::singleShot ( int msec, QObject * receiver, const char * member ) [静态]

这个静态函数在一个给定时间间隔之后调用一个槽。

int QTimer::start ( int msec, bool sshot = FALSE )

开始一个msec毫秒定时的定时器。如果sshot为真,这个定时器将只会被激活一次,否则它将会持续到它被停止

void QTimer::stop ()

停止这个定时器。

void QTimer::timeout () [信号]

当定时器被激活时,这个信号被发射。

二.QObject中的定时器的使用

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

1.需要用到三个函数

(1).int QObject::startTimer ( int interval ) ;

这个是开启一个定时器的函数,他的参数interval是毫秒级别。当开启成功后会返回这个定时器的ID, 并且每隔interval 时间后会进入timerEvent 函数,直到定时器被杀死。

该函数的声明为:int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);   

该函数开启一个定时器,返回值是定时器的编号。

参数一为时间间隔,单位毫秒;

参数二为定时器的精确度:

Qt::PreciseTimer(精确的定时器,尽量保持毫秒精度,试图保持精确度在1毫秒);

Qt::CoarseTimer(粗略的定时器,尽量保持精度在所需的时间间隔5%范围内);

Qt::VeryCoarseTimer(很粗略的定时器,只保留完整的第二精度,大约为500毫秒);

说明:默认是选择Qt::CoarseTimer模式

(2).void QObject::timerEvent ( QTimerEvent * event );

当定时器超时后,会进入该事件timerEvent函数,需要重写timerEvent函数,在函数中通过判断event->timerId()来确定定时器,然后执行某个定时器的超时函数。

(3).void QObject::killTimer ( int id );

通过从startTimer返回的ID传入killTimer 函数中杀死定时器,结束定时器进入超时处理。

注意:kilTimer杀死定时器后,必须再重新创建定时器才能启用定时器。

2.代码示例

(1)test.h

    int timerid1;

    int timerid2;

    void timerEvent(QTimerEvent *e);

(2)test.cpp

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    timerid1 = startTimer(1000,Qt::PreciseTimer);

    timerid2 = startTimer(2000,Qt::PreciseTimer);

}

void MainWindow::timerEvent(QTimerEvent *e)

{

    if(e->timerId()==timerid1)

    {

        qDebug("timer1");

    }

    else if(e->timerId()==timerid2)

    {

        qDebug("timer2");

    }

}

void MainWindow::on_pushButton_clicked()

{

    killTimer(timerid1);

    timerid1 = 0;

}

void MainWindow::on_pushButton_2_clicked()

{

    timerid1 = startTimer(2000);

}

三.静态的singleShot ()函数创建单触发定时器(不推荐)

singleShot函数是一个静态函数,表示只会在被调用时会执行一次操作。其中msec参数是时间,单位为ms,借助此函数可以简单实现一个定时器,定时为100s。

QTimer::singleShot(1*1000,this, &MainWindow::count);

void MainWindow::count()

{

    static int num=0;

    qDebug()<<"count:"<< num;

    if(num < 100)

    {

        QTimer::singleShot(1*1000,this, &MainWindow::count);

        num += 1;

        qDebug()<<num;

    }

}


http://www.ppmy.cn/news/1426517.html

相关文章

MATLAB绘制圆锥曲线:抛物线,双曲线,椭圆

MATLAB绘制圆锥曲线:抛物线,双曲线,椭圆 clc;close all;clear all;warning off;%清除变量x linspace(-10, 10, 1000); % 创建一个x值的向量&#xff0c;范围从-10到10&#xff0c;共1000个点 y x.^2; % 计算每个x值对应的y值% 使用plot函数绘制图形 figure; % 创建一个新的图…

mybatis-generator 自动生成实体类和mapper.xml文件项目搭建

1.创建空java maven项目 2.pom引入数据库驱动和mybatbis自动生成工具依赖 mysql数据库 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSc…

Uni-app中实现数据选择并回传给上个页面的方法

当我们在Uni-app中进行页面间数据传递时&#xff0c;通常会涉及到数据的选择以及回传给上个页面的需求。为了达到这个目的&#xff0c;我们可以利用Uni-app提供的事件机制和页面导航方法来实现。以下是一种实现方式&#xff1a; 数据选择并回传给上个页面的方法 第一步&#…

后端自测帮助指南

问题&#xff1a; 前端反馈联调时间过长&#xff0c;原因是后端接口质量不高&#xff0c;联调时反复出问题&#xff0c;然后花时间去修改bug然后发布后前端才能调&#xff0c;如此一次至少也半个小时了。测试阶段&#xff0c;后端花太多时间配合&#xff0c;测试的冒烟测试往往…

配置路由器并进行设备通信

实验环境&#xff1a; 两台PC两台路由器 拓扑图: 需求描述&#xff1a; 通过PC端实现PC5与PC6的通信 实验步骤&#xff1a; 1.1两台路由器进行ip的配置&#xff1a; 两台路由器的各个端口配置都类似如下代码&#xff0c;这里就不重复描述了&#xff1a; Router#conf t En…

【行为型模式】观察者模式

一、观察者模式概述​ 软件系统其实有点类似观察者模式&#xff0c;目的&#xff1a;一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变&#xff0c;他们之间将产生联动。 观察者模式属于对象行为型&#xff1a; 1.定义了对象之间一种一对多的依赖关系&#xff…

SQL优化——统计信息

文章目录 1、统计信息1.1、表的统计信息1.2、列的统计信息1.3、索引的统计信息 2、统计信息重要参数设置3、检查统计信息是否过期4、扩展统计信息5、动态采样6、定制统计信息收集策略 只有大表才会产生性能问题&#xff0c;那么怎么才能让优化器知道某个表多大呢&#xff1f;这…

【QT教程】QT6QFuture与并发

QT6QFuture与并发 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…