Qt准時器和隨機數詳解。本站提示廣大學習愛好者:(Qt准時器和隨機數詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Qt准時器和隨機數詳解正文
情況是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1
1、准時器
Qt中有兩種辦法來應用准時器,一種是准時器事宜,另外一種是應用旌旗燈號和槽。普通應用了多個准時器時最好應用准時器事宜來處置。
1.新建Qt Gui運用,項目稱號為myTimer,基類選擇QWidget,類名為Widget。
2.到widget.h文件中添加函數聲明:
protected:
void timerEvent(QTimerEvent *);
然後添加公有變量界說:
int id1, id2, id3;
3.上面到設計形式,向界面上拖入兩個標簽部件Label。
4.上面進入widget.cpp文件,先在結構函數中添加以下代碼:
id1 = startTimer(1000); // 開啟一個1秒准時器,前往其ID id2 = startTimer(2000); id3 = startTimer(10000);
這裡開啟了三個准時器,分離前往了它們的id,這個id用來辨別分歧的准時器。准時器的時光單元是毫秒。每當一個准時器溢出時,都邑挪用准時器事宜處置函數,我們可以在該函數中停止響應的處置。
5.上面添加准時器事宜處置函數的界說:
void Widget::timerEvent(QTimerEvent *event) { if (event->timerId() == id1) { // 斷定是哪一個准時器 ui->label->setText(tr("%1").arg(qrand()%10)); } else if (event->timerId() == id2) { ui->label_2->setText(tr("hello world!")); } else { qApp->quit(); } }
這裡先應用timerId()函數前往了溢出的准時器的id,然後依據該id來斷定是哪一個准時器溢出了,並停止響應的處置。每當第一個准時器溢出時都發生一個小於10的隨機數;當第二個准時器溢出時,就更改標簽的文本;當第三個准時器溢出時則加入運用法式。如今可以運轉法式,檢查後果。
6.假如只是想開啟大批的准時器,也能夠應用旌旗燈號和槽來完成。
先在widget.h中添加一個公有槽聲明:
private slots: void timerUpdate();
然後到設計形式向界面上添加一個行編纂器部件Line Edit,再到widget.cpp中添加頭文件包括:
#include <QTimer> #include <QDateTime>
然後在結構函數中添加以下代碼:
QTimer *timer = new QTimer(this); //聯系關系准時器溢出旌旗燈號和響應的槽函數 connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate())); timer->start(1000);
這裡創立了一個准時器,並將其溢出旌旗燈號和更新槽聯系關系起來,最初應用start()函數來開啟准時器。
上面添加timerUpdate()函數的界說:
void Widget::timerUpdate() { //獲得體系如今的時光 QDateTime time = QDateTime::currentDateTime(); //設置體系時光顯示格局 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //在標簽上顯示時光 ui->lineEdit->setText(str); }
這裡外行編纂器中顯示了以後的時光。如今可以運轉法式,檢查後果。
2、隨機數
關於隨機數,在Qt中是應用qrand()和qsrand()兩個函數完成的。在後面的法式中曾經看到了qrand()函數的應用,其可以發生隨機數,qrand()%10可以發生0-9之間的隨機數。要想發生100之內的隨機數就是%100。以此類推。
在應用qrand()函數發生隨機數之前,普通要應用qsrand()函數為其設置初值,假如不設置初值,那末每次運轉法式,qrand()都邑發生雷同的一組隨機數。為了每次運轉法式時,都可以發生分歧的隨機數,我們要應用qsrand()設置一個分歧的初值。這裡應用了QTime類的secsTo()函數,它表現兩個時光點之間所包括的秒數,好比代碼中就是指從零點整到以後時光所經由的秒數。
上面先在widget.cpp的結構函數中添加以下代碼:
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
然後在timerUpdate()函數的最初添加以下代碼:
int rand = qrand() % 300; // 發生300之內的正整數 ui->lineEdit->move(rand, rand);
如許,每過一秒,行編纂器都邑挪動到一個隨機的地位。年夜家可以運轉法式,檢查後果。
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。