Qt中的定時器的使用

alan00000發表於2012-12-27

有兩種方法實現定時器。

第一種。自己建立關聯。

1.新建Gui工程,工程名可以設定為timer。並在主介面上新增一個標籤label,並設定其顯示內容為“0000-00-00 00:00:00 星期日”。

2.在mainwindow.h中新增槽函式宣告。

private slots:

void timerUpDate();

3.在mainwindow.cpp中新增程式碼。

新增#include 的標頭檔案包含,這樣就包含了QtCore下的所有檔案。

建構函式裡新增程式碼:

QTimer *timer = new QTimer(this);

//新建定時器

connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));

//關聯定時器計滿訊號和相應的槽函式

timer->start(1000);

//定時器開始計時,其中1000表示1000ms即1秒

4.然後實現更新函式。

void MainWindow::timerUpDate()

{

QDateTime time = QDateTime::currentDateTime();

//獲取系統現在的時間

QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");

//設定系統時間顯示格式

ui->label->setText(str);

//在標籤上顯示時間

}

5.執行程式,效果如下。


第二種。使用事件。(有點像微控制器中的定時器啊)

1.新建工程。在視窗上新增兩個標籤。

2.在main.cpp中新增程式碼,實現中文顯示。

#include

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

3.在mainwindow.h中新增程式碼。

 

 

void timerEvent(QTimerEvent *);

 

4.在mainwindow.cpp中新增程式碼。

新增標頭檔案#include

在建構函式裡新增以下程式碼。

 

startTimer(1000); //其返回值為1,即其timerId為1

startTimer(5000);//其返回值為2,即其timerId為2

startTimer(10000); //其返回值為3,即其timerId為3

 

 

 

新增了三個定時器,它們的timerId分別為1,2,3。注意,第幾個定時器的返回值就為幾。所以要注意定時器順序。

在下面新增函式實現。

void MainWindow::timerEvent(QTimerEvent *t) //定時器事件

{

switch(t->timerId()) //判斷定時器的控制程式碼

{

case 1 : ui->label->setText(tr("每秒產生一個隨機數:%1").arg(qrand()%10));break;

case 2 : ui->label_2->setText(tr("5秒後軟體將關閉"));break;

case 3 : qApp->quit();break; //退出系統

}

}

 

這裡新增了三個定時器,並都在定時器事件中判斷它們,然後執行相應的功能。這樣就不用每個定時器都寫一個關聯函式和槽函式了。

 

 

隨機數的實現:

上面程式中的qrand(),可以產生隨機數,qrand()%10可以產生0-9之間的隨機數。要想產生100以內的隨機數就%100。以此類推。

但這樣每次啟動程式後,都按同一種順序產生隨機數。為了實現每次啟動程式產生不同的初始值。我們可以使用qsrand(time(0));實現設定隨機數的初值,而程式每次啟動時time(0)返回的值都不同,這樣就實現了產生不同初始值的功能。

我們將qsrand(time(0));一句加入建構函式裡。

程式最終執行效果如下。


原文連結:http://hi.baidu.com/yafeilinux/blog/item/df53dbc315754f110ff4775a.html




相關文章