Qt定时器的应用,实现时钟的状态

Qt有两种定时器,一种是QObject类,另一种是QTimer类。

(1)QObject类提供了一个基本的定时器,通过函数startTimer()来启动,通过killTimer()来结束,通过QTimerEvent来处理定时器事件

startTimer(int interval)启动一个时间间隔为interval毫秒的定时器,返回一个定时器标识符,如果未能启动成功,则返回0。

该定时器只能使用killTime()来杀死,killTimer(int id)通过定时器标识符来杀死定时器。如果有多个定时器,可以通过QTimerEvent::timerId()来获取已经启动的定时器标识符。

(2)QTimer类定时器是QObject类定时器的扩展,它可以提供更多的功能。比如,它支持单次触发和多次触发。

使用QTimer类定时器的步骤:

(1)创建一个QTimer定时器实例:QTimer *timer = new QTimer(this);
(2)连接超时信号与槽:connect(timer, SIGNAL(timeout()), this, SLOT(testFunc()));
(3)启动定时器start();
(4)适时关闭定时器:stop();
(5)删除定时器实例:delete timer;
公共函数:

int               interval() const                                            获得定时器时间间隔

bool              isActive() const                                         获得定时器激活状态

bool              isSingleShot() const                                 获得单次触发使能状态

int               remainingTime() const                              获得距离触发定时器事件的剩余时间

void              setInterval(int msec)                                设置定时器时间间隔

void              setSingleShot(bool singleShot)              设置使能/禁用单次触发

void              setTimerType(Qt::TimerType atype)        设置定时器类型

int               timerId() const                                           获得定时器标识符

Qt::TimerType     timerType() const                             获得定时器类型


公共槽函数:

void     start(int msec)                             启动定时时间间隔为msec毫秒的定时器
void     start()                                           启动定时器
void     stop()                                           暂停定时器


信号:
void     timeout()                                    超时
 以上部分转载与:http://blog.csdn.net/jan5_reyn/article/details/38955719(以此为基础略作修改) 

定时器事件和普通鼠标、键盘事件一样进入事件循环处理。因此,定时器的处理函数需要尽快完成,不然也会把界面卡死。

定时器不是精确的,因为它的处理函数也是放在事件循环中执行的;

头文件:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimerEvent>
#include <QTime>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void timerEvent(QTimerEvent *event);
private:
    int m_timerId;
};

#endif // MAINWINDOW_H
源文件:

main.cpp

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

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

    return a.exec();
}
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_timerId = startTimer(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//定时器处理函数
void MainWindow::timerEvent(QTimerEvent *event)
{
     //可以有多个定时器,每个定时器有不同的处理
    if(event->timerId() == m_timerId)
    {
        QTime now = QTime::currentTime();
        QString text = now.toString("HH:mm:ss");//按照24小时制的格式进行字符串格式化;
        ui->timeLineEdit->setText(text);
    }
}

时间格式化说明:

hh:mm:ss  
按照12小时制的格式进行字符串格式化
如果时间处于00:00:00——12:59:59,则返回的字符串正常
如果时间处于13:00:00——23:59:59,则返回的字符串是实际时间-12小时后的值,也就是说比真实的时间少了12个小时。
例如:14:00:00进行格式化后的字符串为“2:00:00”

HH:mm:ss
按照24小时制的格式进行字符串格式化
当时间为任意一个区间,则返回的字符串都是正常的。

设计界面:



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值