我們在用QT編寫實現定時器和隨機數的產生時,按照手冊上的製作,程序可以實現,但這樣每次啓動程序後,都按同一種順序產生隨機數。爲了實現每次啓動程序產生不同的初始值。我們可以使用qsrand(time(0));實現設置隨機數的初值,而程序每次啓動時time(0)返回的值都不同,這樣就實現了產生不同初始值的功能。
於是我們將qsrand(time(0));一句加入構造函數裏。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore>
#include "time.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qsrand(time(0)); //每次啓動程序產生不同的初始值
startTimer(1000); //其返回值爲1,即其timerId爲1
startTimer(5000);//其返回值爲2,即其timerId爲2
startTimer(10000); //其返回值爲3,即其timerId爲3
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerEvent(QTimerEvent *t) //定時器事件
{
switch(t->timerId()) //判斷定時器的句柄
{
case 1 : ui->label->setText(tr("每秒產生一個隨機數:%1").arg(qrand()%10));break;
case 2 : ui->label_2->setText(tr("5秒後軟件將關閉"));break;
case 3 : qApp->quit();break; //退出系統
}
}
但是我們會發現程序編譯時出錯了。
根據經驗,沒有定義,我們第一時間反應是頭文件的問題,我們發現剛剛定義的頭文件沒有出錯,那就是才定義的包括time的頭文件。查找資料,它的頭文件是#include "time.h",於是我們把這個頭文件加上去,編譯時就不會出錯了。此時就不會按同一種順序產生隨機數。