QTimer的两种用法及Qt自动获取系统时间 - Qt学习

       在Qt中使用定时器有两种方法,QTimer类的定时器和基于QObiect类的定时器。定时器的精确性依赖于操作系统和硬件(主要是操作系统),大多数平台支持20ms的精确度,实测Win10的精度基本就是20毫秒左右(硬件高配)。

一、Qtimer类的定时器

       Qtimer类的定时器使用比较简单,首先包含头文件
#include <QTimer>

       使用定时器的三步,在timerUpDate函数中编写定时器的处理函数,

QTimer* timer = new QTimer(this);   //定时器的常规用法
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
timer->start(1000);

二、QObject类的定时器

       QObject类提供的定时器功能相关的成员函数有:startTimer()、timeEvent()、killTimer()。其中startTimer()和timerEvent()原型及说明如下:

int QObject::startTimer(int interval);

       开始一个定时器并返回定时器ID,如果不能开始一个定时器,将返回0。定时器开始后,每隔interval毫秒间
隔将触发一次超时事件,直到killTimer()被调用来删除定时器。如果interval为0,那么定时器事件每次发生
时没有窗口系统事件处理。

virtual voidQObject::timerEvent(QTimerEvent *event);

       虚函数timerEvent()被重载来实现用户的超时事件处理函数。如果有多个定时器在运行,QTimerEvent::timerId() 被用来查找指定定时器,并对其进行操作。当定时器事件发生时,虚函数timerEvent()随着QTimerEvent事件参数类一起被调用,重载这个函数可以获得定时器事件。

       QObject类的定时器的基本用法如下:

       在某个需要使用定时器的类中调用startTimer函数

startTimer(2000);
startTimer(5500);
startTimer(10500);

       重载定时器事件处理函数,在函数中添加事件处理的代码即可。

void timerEvent(QTimerEvent* t);    //定时器事件重载函数

三、综合实例

       头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QPlainTextEdit>

class MainWindow : public QWidget
{
    Q_OBJECT
public:
    MainWindow();
    ~MainWindow();

    QPlainTextEdit* plainTextEdit;
public slots:
    void timerUpDate();                 //与定时器常规用法的槽函数

    void timerEvent(QTimerEvent* t);    //定时器事件重载函数
};
#endif // MAINWINDOW_H

       源代码

#include <QHBoxLayout>
#include <QDateTime>
#include <QTimer>
#include <QDebug>

#include "MainWindow.h"

MainWindow::MainWindow()
{
    plainTextEdit = new QPlainTextEdit;

    QHBoxLayout* layout = new QHBoxLayout(this);
    layout->addWidget(plainTextEdit);
    layout->setParent(this);

QTimer* timer = new QTimer(this);   //定时器的常规用法
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
timer->start(1000);

    startTimer(2000);
    startTimer(5500);
    startTimer(10500);
//    int ID1 = startTimer(2000);
//    int ID2 = startTimer(5500);
//    int ID3 = startTimer(10500);
//    qDebug() << ID1 << endl;
//    qDebug() << ID2 << endl;
//    qDebug() << ID3 << endl;
}

void MainWindow::timerUpDate()
{
    QDateTime time = QDateTime::currentDateTime();
    qDebug() << time;
    QString timeStr = time.toString("yyyy-MM-dd dddd hh:mm:ss");
    plainTextEdit->appendPlainText(timeStr);
}

void MainWindow::timerEvent(QTimerEvent *t)
{
    QDateTime time = QDateTime::currentDateTime();
    QString timeStr = time.toString("yyyy-MM-dd dddd hh:mm:ss");
    switch (t->timerId())
    {
    case 1:
        plainTextEdit->appendPlainText(timeStr + tr(" timerId = %1").arg(t->timerId()));
        break;
    case 2:
        plainTextEdit->appendPlainText(timeStr + tr(" timerId = %1").arg(t->timerId()));
        break;
    case 3:
        plainTextEdit->appendPlainText(timeStr + tr(" timerId = %1").arg(t->timerId()));
        break;
    default:
        plainTextEdit->appendPlainText(timeStr + tr(" timerId = %1").arg(t->timerId()));
        break;
    }
}

MainWindow::~MainWindow()
{
}

       main.cpp代码

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}






  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值