zoukankan      html  css  js  c++  java
  • QT基础:QT 定时器学习

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

    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"

    #define TIMER_TIMEOUT   (2*1000)

    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(
    1000);
        
    // ![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]

  • 相关阅读:
    Git上手:四种常见的Git协同工作方式
    Git上手:Git扫盲区
    理解web缓存
    浅谈对技术债的理解
    保护个人隐私,从我做起
    cookie注意事项
    了解JavaScript核心精髓(二)
    简单实现nodejs爬虫工具
    浅谈我所见的CSS组织风格
    利用正则表达式清除多余的空行
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10329134.html
Copyright © 2011-2022 走看看