欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt定時器和隨機數詳解

 更新時間:2015年06月17日 11:15:43   投稿:hebedich  
在前一篇中我們介紹了鍵盤和鼠標事件,其實還有一個非常常用的事件,就是定時器事件,如果要對程序實現時間上的控制,那么就要使用到定時器。而隨機數也是很常用的一個功能,在我們要想產生一個隨機的結果時就要使用到隨機數。本文我們就來簡單介紹一下定時器和隨機數。

環(huán)境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.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用來區(qū)分不同的定時器。定時器的時間單位是毫秒。每當一個定時器溢出時,都會調用定時器事件處理函數,我們可以在該函數中進行相應的處理。

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的隨機數;當第二個定時器溢出時,就更改標簽的文本;當第三個定時器溢出時則退出應用程序?,F在可以運行程序,查看效果。

6.如果只是想開啟少量的定時器,也可以使用信號和槽來實現。
先在widget.h中添加一個私有槽聲明:

private slots:
  void timerUpdate();

然后到設計模式向界面上添加一個行編輯器部件Line Edit,再到widget.cpp中添加頭文件包含:

#include <QTimer>
#include <QDateTime>

然后在構造函數中添加如下代碼:

QTimer *timer = new QTimer(this);
//關聯(lián)定時器溢出信號和相應的槽函數
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);

這里創(chuàng)建了一個定時器,并將其溢出信號和更新槽關聯(lián)起來,最后使用start()函數來開啟定時器。
下面添加timerUpdate()函數的定義:

void Widget::timerUpdate()
{
  //獲取系統(tǒng)現在的時間
  QDateTime time = QDateTime::currentDateTime();
  //設置系統(tǒng)時間顯示格式
  QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
  //在標簽上顯示時間
  ui->lineEdit->setText(str);
}

    這里在行編輯器中顯示了當前的時間?,F在可以運行程序,查看效果。

二、隨機數

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

這樣,每過一秒,行編輯器都會移動到一個隨機的位置。大家可以運行程序,查看效果。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關文章

  • 詳解C語言面向對象編程中的封裝

    詳解C語言面向對象編程中的封裝

    這篇文章主要為大家詳細介紹了C語言面向對象編程中的封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • vscode配置遠程開發(fā)環(huán)境并遠程調試運行C++代碼的教程

    vscode配置遠程開發(fā)環(huán)境并遠程調試運行C++代碼的教程

    這篇文章主要介紹了vscode配置遠程開發(fā)環(huán)境并遠程調試運行C++代碼的教程,本文通過截圖實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C++常量指針,指針常量,指向常量的常指針詳解

    C++常量指針,指針常量,指向常量的常指針詳解

    剛接觸到指針時,關于C++常量指針,指針常量,指向常量的常指針容易混淆,所以整理下,希望能夠幫助自己也幫助到大家
    2021-10-10
  • C語言學習進階篇之萬字詳解指針與qsort函數

    C語言學習進階篇之萬字詳解指針與qsort函數

    之前的指針詳解中,提到過qsort函數,這個函數是用來排序的,下面這篇文章主要給大家介紹了關于C語言指針與qsort函數的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • C++中自定義sleep、條件變量sleep實例

    C++中自定義sleep、條件變量sleep實例

    這篇文章主要介紹了C++中自定義sleep、條件變量sleep實例,本文直接給出實例代碼并講解了功能作用和使用方法,需要的朋友可以參考下
    2015-03-03
  • C語言實現車輛出租管理系統(tǒng)

    C語言實現車輛出租管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現車輛出租管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • VC6.0如何創(chuàng)建以及調用動態(tài)鏈接庫實例詳解

    VC6.0如何創(chuàng)建以及調用動態(tài)鏈接庫實例詳解

    作為客戶與后臺的中介,為了更好的調節(jié)兩方的關系,我明智滴選擇了webservice以及動態(tài)鏈接庫。在與客戶c++使動態(tài)鏈接庫方式,而與后臺java,使用webservice來交流溝通
    2013-01-01
  • C語言形參和實參傳值和傳址詳解刨析

    C語言形參和實參傳值和傳址詳解刨析

    形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。實參出現在主調函數中,進入被調函數后,實參變量也不能使用,形參和實參的功能是作數據傳送。發(fā)生函數調用時, 主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送
    2021-11-11
  • C++語言編寫寫日志類

    C++語言編寫寫日志類

    這篇文章主要介紹了C++語言編寫寫日志類的相關資料,支持寫日志級別設置、支持多線程、支持可變形參表寫日志,需要的朋友可以參考下
    2015-12-12
  • C語言面試C++二維數組中的查找示例

    C語言面試C++二維數組中的查找示例

    這篇文章主要介紹了C語言面試C++二維數組中的查找示例,文中給出基本能拿下面試官的操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09

最新評論