qt產生乙個隨機字串 Qt定時器和隨機數詳解

2021-10-16 18:33:51 字數 2294 閱讀 8515

環境是:windows 7 + qt 4.8.1 +qt creator 2.4.1

一、定時器

qt中有兩種方法來使用定時器,一種是定時器事件,另一種是使用訊號和槽。一般使用了多個定時器時最好使用定時器事件來處理。

1.新建qt gui應用,專案名稱為mytimer,基類選擇qwidget,類名為widget。

2.到widget.**件中新增函式宣告:

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 {

這裡先使用timerid()函式返回了溢位的定時器的id,然後根據該id來判斷是哪個定時器溢位了,並進行相應的處理。每當第乙個定時器溢位時都產生乙個小於10的隨機數;當第二個定時器溢位時,就更改標籤的文字;當第三個定時器溢位時則退出應用程式。現在可以執行程式,檢視效果。

6.如果只是想開啟少量的定時器,也可以使用訊號和槽來實現。

先在widget.h中新增乙個私有槽宣告:

private slots:

void timerupdate();

#include

#include

然後在建構函式中新增如下**:

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);

這裡在行編輯器中顯示了當前的時間。現在可以執行程式,檢視效果。

二、隨機數

關於隨機數,在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);

qt解釋json字串的乙個bug

最近使用qt 我用的是qt5.6 解析json字串,發現qt的乙個bug,如下 if defined msc ver msc ver 1600 pragma execution character set utf 8 endif int qtjsontest return 1 int jsoncpp...

C 產生隨機字串!

public class radnum set public string createradnum int codelen string arr codeserial.split string code int randvalue 1 random rand new random unchecke...

QT 字串中文

qstring內部採用unicode編碼方式,當字串存在中文時,需要根據系統的本地編碼方式進行轉換。一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf 8編碼。通過qtextcodec類轉換字串編碼。示例qstring轉const cahr qtextcodec codec...