定时器在编程中经常要用到,有必要学习一下,记记笔记!

Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类。

1、QObject中的定时器的使用,需要用到三个函数

int QObject::startTimer ( int interval ) ;          // 开启定时器并设定间隔,返回定时器ID

void QObject::timerEvent ( QTimerEvent * event );     // 定时器到时处理函数

void QObject::killTimer ( int id );             // 关闭定时器

2、使用QTimer定时器类(可以使用信号与槽)

QTimer *timer = new QTimer(this);              // 设置定时器

connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));   // 连接定时器到时槽函数

void QTimer::start ( int msec );                 // 开启定时器并设定间隔

void QTimer::stop();                    // 关闭定时器

关于定时器精度:

int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);

void QTimer::setTimerType(Qt::TimerType atype);

Qt Assitant中的原文如下:

enum Qt::TimerType

The timer type indicates how accurate a timer can be.

QTimerDisplay.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
#ifndef QTIMERDISPLAY_H
#define QTIMERDISPLAY_H

#include <QObject>
#include <QTimer>
#include <QTimerEvent>
#include <QDebug>

class QTimerDisplay : public QObject
{
    Q_OBJECT
public:
    explicit QTimerDisplay(QObject *parent = nullptr);

protected:
    // ![0]
    virtual void timerEvent(QTimerEvent *event);
    // ![0]

signals:

public slots:
    // ![1]
    void onTimeout();
    // ![1]

private:
    // ![0]
    int     m_nTimerID;
    // ![0]
    // ![1]
    QTimer  *m_pTimer;
    // ![1]
};

#endif // QTIMERDISPLAY_H

QTimerDisplay.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
#include "qtimerdisplay.h"

)

QTimerDisplay::QTimerDisplay(QObject *parent) : QObject(parent)
{
    // ![0]
    m_nTimerID = startTimer(TIMER_TIMEOUT);
    // ![0]
    // ![1]
    m_pTimer = new QTimer(this);
    connect(m_pTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
    m_pTimer->start();
    // ![1]
}

// ![0]
void QTimerDisplay::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == m_nTimerID)
    {
        qDebug() << "Timer ID:" << event->timerId();
    }
}
// ![0]

// ![1]
void QTimerDisplay::onTimeout()
{
    qDebug() << "Timer is out!";
}
// ![1]

QT基础:QT 定时器学习的更多相关文章

  1. QT基础:QMainWindow学习小结

    简述 普通的桌面应用程序有个共同的特性,有菜单栏.工具栏.状态栏.中央窗口等部件.菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口.那么这些典型的 ...

  2. 【Qt】Qt实战一二三【转】

    简介 “我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流”,不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的 ...

  3. C/C++ Qt 基础通用组件应用

    QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率. 目前,QT开发中常用的基础 ...

  4. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  5. QT入门学习笔记1:为什么要选QT及QT软件下载

    为什么选择QT? Qt突出的优势: ◆ Qt 是基于 C++ 的一种语言扩展(Extention) C/C++ 目前还是一种很多人都在学习的语言. Qt的好处就在于Qt本身可以被称作是一种 C++ 的 ...

  6. Qt Creator 源码学习笔记03,大型项目如何管理工程

    阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...

  7. Qt Creator 源码学习笔记04,多插件实现原理分析

    阅读本文大概需要 8 分钟 插件听上去很高大上,实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾 开发插件其实就是开发一个动态 ...

  8. Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObje ...

  9. Qt Meta Object system 学习

    原文地址:http://blog.csdn.net/ilvu999/article/details/8049908 使用 meta object system 继承自 QOject 类定义中添加 Q_ ...

  10. [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator

    Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...

随机推荐

  1. 设计模式——代理模式(静态代理和JDK、CGLib动态代理)

    简介 什么是代理模式? 代理模式就是多一个代理类出来,代替原对象进行一些操作.比如说租房的中介.打官司的律师.旅行社,他们可以代替我们做一些事情,这就是代理. 代理模式的应用场景: 如果已有的方法在使 ...

  2. [uEnv.txt]在uEnv.txt文件中使用if语句实现Image/dtb文件切换

    指定image/dtb文件 bootdir= bootfile=zImage fdtfile=embest-SBCC_PH8800_WLQ.dtb loadaddr=0x82000000 fdtadd ...

  3. Go Revel - Interceptors(拦截器)

    `interceptor`拦截器是revel框架在执行一个`action`的前后所调用的函数.他允许以AOP方式进行开发,这种模式非常有用: 1.记录请求日志 2.错误处理 3.状态保持 在revel ...

  4. hive之案例分析(grouping sets,lateral view explode, concat_ws)

    有这样一组搜索结果数据: 租户,平台, 登录用户, 搜索关键词, 搜索的商品结果List {"tenantcode":"", "platform&qu ...

  5. Spark Streaming自定义Receivers

    自定义一个Receiver class SocketTextStreamReceiver(host: String, port: Int( extends NetworkReceiver[String ...

  6. PCL点云分割(2)

    关于点云的分割算是我想做的机械臂抓取中十分重要的俄一部分,所以首先学习如果使用点云库处理我用kinect获取的点云的数据,本例程也是我自己慢慢修改程序并结合官方API 的解说实现的,其中有很多细节如果 ...

  7. eclipse配置google代码风格

    1.下载google code style的xml文件 地址:https://github.com/google/styleguide 导入xml文件 可能会遇到警告: 版本的问题,忽略即可. < ...

  8. PCB设计与信号完整性

    之前在设计板卡时,只是听过相关的概念,但是未真正去研究关于SI相关的知识.将之前看过的一些资料整理如下: (1)信号完整性分析 与SI有关的因素:反射,串扰,辐射.反射是由于传输路径上的阻抗不匹配导致 ...

  9. Chrome驱动安装问题

    1.org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value' 原因:浏览器 ...

  10. Window7 Cocos2d-x配置开发环境

    1.到Cocos2d-x官方网下载最新版,解压后在目录cocos2d-x-2.1.5\tools\project-creator\create_project.py 2.安装Python,到网站htt ...