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

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. Chrome 调用vue.js 记录

    一.今晚遇到一个问题,就是不能直接在 html 直接调用 js 代码的问题 二.会出现如下错误: Refused to execute inline script because it violate ...

  2. calico集成详解

    一.摘要 ======================================================================================= 包括三项: c ...

  3. Sencha Touch 2.3 自定义主题皮肤,颜色

    写博客园越来越懒了,只写重点部分,不明白的可以Q我. 1.当你通过Cmd生成项目之后,App\resources\sass就是我们的样式源文件 2.想自定义自己的样式分为两种方式 扩展:这个是基于st ...

  4. 从PCD文件写入和读取点云数据

    (1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp  CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...

  5. oracle中merge into用法解析

    merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] an ...

  6. eclipse如何设置高亮代码的背景色,比如选中某个单词,高亮所有的

    设置方法如下: 1.单击IDE顶部Window菜单下的Prefences,如图: 2.在打开对话框的左侧树上,找到Java节点下的Editor中的Mark Occurren,如图: 3.点击Mark ...

  7. C# 使用XPath解析网页

    1.需要安装库HtmlAgilityPack ,官网http://htmlagilitypack.codeplex.com/ // From File var doc = new HtmlDocume ...

  8. e793. 监听JSpinner数据变化

    // Create a nummber spinner JSpinner spinner = new JSpinner(); // Add the listener spinner.addChange ...

  9. e775. 设置JList组件项的维数

    By default, the width of the list is determined by the longest item and the height is determined by ...

  10. 解决ubuntu上网慢的方法

    在ubuntu下用firefox等浏览器上网,往往比在windows下上网要慢好多,但细心的人会发现,慢的时间是花在DNS查找上面了.那么 我们可以在本机缓存DNS,也就是在本机架设一个DNS代理服务 ...