Qt定时器(一)

2020-04-14 21:41:20 浏览数 (1)

定时器也是一个我们经常使用的东西。下面的代码演示了定时器的基本使用方法。

代码语言:javascript复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("CLOCK");              //设置窗口标题
    
    //设置标签显示信息
    ui->label->setText(QString("<center><h1>00</h1></center>"));       
    ui->label_2->setText(QString("<center><h1>00:</h1></center>"));
    ui->label_3->setText(QString("<center><h1>00:</h1></center>"));
    
    //启动定时器使用函数startTimer(),它的返回值唯一标识一个定时器
    id1 =  startTimer(1000*60*60);              //1时
    id2 = startTimer(1000*60);                     //1分
    id3 = startTimer(1000);                           //1秒
}

void MainWindow::timerEvent(QTimerEvent *event)
{
    if(this->id3 == event->timerId()) //event有个函数叫timerId可以获取是哪个定时器发出的事件
    {
        static int num1= 0;
        if(60 == num1)
        {
            num1 = 0;
        }
        if(10 <= num1)                      //QString::number()能把一个int转换为Qstring类型。
        ui->label->setText(QString("<center><h1>%1</h1></center>").arg(QString::number(num1  )));
        else
        ui->label->setText(QString("<center><h1>0%1</h1></center>").arg(QString::number(num1  )));  
    }
    if(this->id2 == event->timerId())
    {
        static int num2= 0;
        if(60 == num2)
        {
            num2 = 0;
        }
        if(10 <= num2)
        ui->label_2->setText(QString("<center><h1>%1:</h1></center>").arg(QString::number(num2  )));
        else
        ui->label_2->setText(QString("<center><h1>0%1:</h1></center>").arg(QString::number(num2  )));    
    }
    if(this->id1 == event->timerId())
    {
        static int num3= 0;
        if(24 == num3)
        {
            num3 = 0;
        }
        if(10 <= num3)
        ui->label_3->setText(QString("<center><h1>%1:</h1></center>").arg(QString::number(num3  )));
        else
        ui->label_3->setText(QString("<center><h1>0%1:</h1></center>").arg(QString::number(num3  )));  
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行结果如下所示:

当然了这样的CLOCK肯定是一点都不准确的。因为QTimer是一个定时器,它不是获取系统时间的。要想显示准确的时间还是需要获取系统时间,使用QTime这是比较稳妥的做法。

0 人点赞