程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt准時器和隨機數詳解

Qt准時器和隨機數詳解

編輯:關於C++

Qt准時器和隨機數詳解。本站提示廣大學習愛好者:(Qt准時器和隨機數詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Qt准時器和隨機數詳解正文


情況是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1

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用來辨別分歧的准時器。准時器的時光單元是毫秒。每當一個准時器溢出時,都邑挪用准時器事宜處置函數,我們可以在該函數中停止響應的處置。

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的隨機數;當第二個准時器溢出時,就更改標簽的文本;當第三個准時器溢出時則加入運用法式。如今可以運轉法式,檢查後果。

6.假如只是想開啟大批的准時器,也能夠應用旌旗燈號和槽來完成。
先在widget.h中添加一個公有槽聲明:

private slots:
  void timerUpdate();

然後到設計形式向界面上添加一個行編纂器部件Line Edit,再到widget.cpp中添加頭文件包括:

#include <QTimer>
#include <QDateTime>

然後在結構函數中添加以下代碼:

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

    這裡外行編纂器中顯示了以後的時光。如今可以運轉法式,檢查後果。

2、隨機數

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

如許,每過一秒,行編纂器都邑挪動到一個隨機的地位。年夜家可以運轉法式,檢查後果。

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved