Qt 計時器與隨機數

2021-07-12 01:08:43 字數 2878 閱讀 2700

有兩種方法實現定時器。

第一種。自己建立關聯。

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...