Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1334708
  • 博文数量: 177
  • 博客积分: 3640
  • 博客等级: 中校
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 16:51
文章分类

全部博文(177)

文章存档

2014年(1)

2013年(10)

2012年(3)

2011年(163)

分类: LINUX

2011-05-14 08:29:59

Qt中的QTimer會定時發出QTimerEvent事件,您可以設定一個接受QTimerEvent的函式來接收這個事件,一旦接收到QTimerEvent事件,函式的內容就會被執行,例如接下來的範例,將設計一個數位時鐘,可以顯示目前時間與日期。

數位時鐘的顯示將使用QLCDNumber,這邊直接繼承QLCDNumber來實作:

  • DigitalClock.h
#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H

#include

class DigitalClock : public QLCDNumber {

public:
DigitalClock(QWidget *parent=0);

protected:
void timerEvent(QTimerEvent *);

private:
bool isColon;
};

#endif


在DigitalClock中,重新定義了timerEvent()來接受TimerEvent,以定時接受QTimer的事件並進行時間的擷取與顯示更新,DigitalClock實作如下:

  • DigitalClock.cpp
#include "DigitalClock.h"

#include

DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent) {
this->isColon = false;
this->setFrameStyle(QFrame::Panel | QFrame::Raised);
this->setNumDigits(11);
QObject::startTimer(500);
}

void DigitalClock::timerEvent(QTimerEvent *e) {
isColon = !isColon;

QString timeString = QTime::currentTime().toString().left(5);

QDate date = QDate::currentDate();
QString dateString;
dateString.sprintf( " %2d-%2d", date.month(), date.day());

QString displayString = timeString + dateString;

if (!isColon) {
displayString[2] = ' ';
}

display(displayString);
}


QTimer的啟動是使用QObject::startTimer(500),
如果想停止QTimer,則使用QTimer::killTimer(),500的單位是毫秒,這邊每0.5秒發出一次事件,每次timerEvent()接受到QTimerEvent事件時,會擷取目前的時間與日期,每0.5秒處理一次是為了處理冒號的顯示,這是由timerEvent()中if判斷式來負責。

撰寫一個主程式來看看這個元件是否運作正常:

  • main.cpp
#include "DigitalClock.h"
#include

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

DigitalClock *digitalClock = new DigitalClock;

digitalClock->resize(500, 80);
digitalClock->setWindowTitle("QTimer");

digitalClock->show();

return app.exec();
}


執行的結果畫面如下所示:

阅读(2776) | 评论(0) | 转发(0) |
0

上一篇:Qt this

下一篇:Qt图片显示效率的比较

给主人留下些什么吧!~~