有兩種方法實現定時器。
第一種。自己建立關聯。
1.新建gui工程,工程名可以設定為timer。並在主介面上新增乙個標籤label,並設定其顯示內容為「0000-00-00 00:00:00 星期日」。
2.在mainwindow.h中新增槽函式宣告。
[cpp]view plain
copy
private
slots:
void
timerupdate();
3.在mainwindow.cpp中新增**:
新增#include
的標頭檔案包含,這樣就包含了qtcore下的所有檔案。
建構函式裡新增**:
[cpp]view plain
copy
qtimer *timer =
newqtimer(
this
);
//新建定時器
connect(timer,signal(timeout()),this
,slot(timerupdate()));
//關聯定時器計滿訊號和相應的槽函式
timer->start(1000);
//定時器開始計時,其中1000表示1000ms即1秒
4.然後實現更新函式。
[cpp]view plain
copy
void
mainwindow::timerupdate()
第二種使用事件。(有點像微控制器中的定時器啊)
1.新建工程,在窗體上新增2個標籤。
2.在mainwindow.h中新增實現**:
[cpp]view plain
copy
void
timerevent(qtimerevent *);
3.在mainwindow.cpp中新增實現**:
新增標頭檔案#include "***"
在建構函式裡實現**:
[cpp]view plain
copy
starttimer(1000);
//其返回值為1,即其timerid為1
starttimer(5000);//其返回值為2,即其timerid為2
starttimer(10000); //其返回值為3,即其timerid為3
新增了三個定時器,它們的timerid分別為1,2,3。注意,第幾個定時器的返回值就為幾。所以要注意定時器順序。
在下面新增函式實現。
[cpp]view plain
copy
void
mainwindow::timerevent(qtimerevent *t)
//定時器事件
}
這裡新增了三個定時器,並都在定時器事件中判斷它們,然後執行相應的功能。這樣就不用每個定時器都寫乙個關聯函式和槽函式了。
隨機數的實現:
上面程式中的qrand(),可以產生隨機數,qrand()%10可以產生0-9之間的隨機數。要想產生100以內的隨機數就%100。以此類推。
但這樣每次啟動程式後,都按同一種順序產生隨機數。為了實現每次啟動程式產生不同的初始值。我們可以使用qsrand(time(0));實現設定隨機數的初值,而程式每次啟動時time(0)返回的值都不同,這樣就實現了產生不同初始值的功能。
我們將qsrand(time(0));
一句加入建構函式裡。
qrand()理論上返回0 到 rand_max間的值。
如果要返回0~n間的值,則為:qrand()%n;
如果要返回a~b間的值,則為:a + qrand() % (b - a)
這裡介紹2種方法
標頭檔案都必須的,不多說了: #include
[cpp]view plain
copy
qtime t;
t= qtime::currenttime();
qsrand(t.msec()+t.second()*1000);
intn = qrand();
還有乙個簡單方法:
[cpp]view plain
copy
qsrand(time(null));
intn = qrand();
這2句不一定要連著,前邊初始化種子可以在程式開始的時候就初始化。
如果2句連在一起,並且又同時出現在for迴圈中,就容易產生相同的隨機數。
關於srand的說明:
srand函式是隨機數發生器的初始化函式。
原型:void srand(unsigned seed);
用法:它需要提供乙個種子,如: srand(1); 直接使用1來初始化種子。不過常常使用系統時間來初始化,即使用 time函式來獲得系統時間,它的返回值為從 00:00:00 gmt, january 1, 1970 到現在所持續的秒數,然後將time_t型資料轉化為(unsigned)型再傳給srand函式,即: srand((unsigned) time(&t)); 還有乙個經常用法,不需要定義time_t型t變數,即: srand((unsigned) time(null)); 直接傳入乙個空指標,因為你的程式中往往並不需要經過引數獲得的t資料。srand((int)getpid()); 使用程式的id(getpid())來作為初始化種子,在同乙個程式中這個種子是固定的。
clock計時器的使用和隨機數的產生
clock是用來計時的,精確到ms級別 clock 在標頭檔案,返回值為clock t就乙個超大整形,下面是乙個例子,計算機迴圈的時間 include include include using namespace std int main finsh clock cout return 0 產生隨...
QT 高精計時器
最近需要使用qt5寫個上位機串列埠助手,給嵌入式系統傳送指令,時間要求比較短,需要22ms一次資料流。在網上查閱資料後發現,qt有兩種方法設定定時器 1.qobject 2.qtimer 當然網上關於怎樣使用這兩個類的講解很多,如 然而乙個比較尷尬的事情是,這兩個定時器對於20ms以下的定時,工作的...
Qt計時器的使用
在我們的日常設計程式中,經常需要固定時間段來重新整理介面或者處理一些事務,這個時候計時器就很重要。比如說在用qt設計乙個時間顯示程式時 我們先看看它的訊號 槽機制 public q slots void start int msec void start void stop q signals vo...