環境是: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...