相关函数    #include <QtGlobal>

qsrand(unsigned seed);
qrand();

以上函数产生的随机数为伪随机数。之所以称为伪随机数,有以下两点原因:

1:qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间

(RAND_MAX == 32767)。如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。

2:之所以称为伪随机数,因为种子的值相同的情况下,函数运行两次产生的随机序列一致。

注意:qrand()函数产生的是一个随机序列,只不过每次只返回一个值。举例如下:

#include <QTime>
#include <QtGlobal>
#include <QDebug> void generateAscendRandomNumber()
{
int i;
QList<int> numbersList;
qsrand();
for(i=;i<;i++)
{
numbersList.append(qrand()%);
}
qSort(numbersList.begin(),numbersList.end());
for(i=;i<;i++)
{
qDebug()<<numbersList[i];
}
} int main()
{
generateAscendRandomNumber() ;
}

以上输出为:1  2  2  2  4  6  6  7  9(实际会换行)

多次运行程序发现输出结果是一致的。因为种子不变的情况下,qrand()运行多次产生的随机序列一致。

结论:种子相同,每一个随机序列内的每一个数都是随机的,但是随机序列之间却不是随机的。

为了获得不同的随机序列,可以使用当前时间作为种子,来进行模拟随机数。因为时间是不断变化的,即种子的值也是不同的,所以产生的随机序列也是不同的。

qsrand(QTime(,,).secsTo(QTime::currentTime()))

int QTime::secsTo ( const QTime & t ) const

函数返回这个时间到t的秒数(如果t早于这个时间,返回的为负数)。因为QTime只能度量一天之内的时间,而且一天内只有86400秒,

所以结果就应该在-86400秒和86400秒之间。

实际上QTime(0,0,0).secsTo(QTime::currentTime())返回的值就是从0到QTime::currentTime()的值。

Qt 随机数的更多相关文章

  1. Memo-Tech

    Qt install Qt on Ubuntu Download *.run file; Click downloaded file to install. Note that gcc module ...

  2. QT生成随机数

    QT生成随机数和C语言差距不大,C语言用srand()和rand(),QT是用Qsrand()和qrand(): QT生成随机数的格式是: qsrand(QTime(0,0,0).secsTo(QTi ...

  3. 初识Qt鼠标、键盘事件及定时器和随机数

    1.新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget. 2.widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数 privat ...

  4. Qt事件系统之四:定时器事件与随机数

    一.定时器事件和随机数 QTimerEvent类用来描述一个定时器事件.对于一个QObject的子类,只需要使用int QObject::startTimer ( int interval)函数来开启 ...

  5. Qt中使用随机数

    新建Empty qmake project,命名为UseRand UseRand.pro SOURCES += \ main.cpp QT += core main.cpp #include < ...

  6. Qt产生随机数(两种方法)

    第一种方法 #include <QTime> QTime time; time= QTime::currentTime(); qsrand(time.msec()+time.second( ...

  7. centos7 shell脚本实现随机数

    questions: 1.随机数如何获得 2.如何确定随机值的大小是我们所需要的 answers: 1.目前可以通过获取系统时间的毫秒数来得到,毕竟毫秒数还是变化比较快的 可以看到这个速度还是变化很快 ...

  8. Qt 框架 开发HTTP 服务器 开发记录

    最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...

  9. 【Qt】2.4 做一个“猜数字”的游戏

    使用对话框和Qt设计师来实现一个相当简单的小游戏.同时将通过这个程序来看布局的隐藏和显示是如何来影响窗口界面的变化的. 新建一个Qt项目,把Qt Creator默认给的mainwindow.h.mai ...

随机推荐

  1. 《Python》 列表、元祖和range

    一.列表: 1.Python基础数据类型之一: 2.其他语言中也有列表的概念,js 数组: 3.可索引,可切片,可加步长: 4.列表可以存储大量的数据: 第一:索引,切片,切片+步长. 第二:增删改查 ...

  2. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(二)

    你开学,我放价!MyEclipse线上狂欢继续!火热开启中>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的 ...

  3. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 四.运行XDoclet代码生成 通常每次更改XDoclet EJB配置.应用程序服务器设置或修改任何EJB ...

  4. 关于send message 函数

    Windows是一个消息驱动模式的系统,SendMessage 是应用程序和应用程序之间进行消息传递的主要手段之一.由于 SendMessage 函数的参数选项过于繁多,因此很有必要作一个汇总,分门别 ...

  5. Ascii vs. Binary Files

    Ascii vs. Binary Files Introduction Most people classify files in two categories: binary files and A ...

  6. ZEDGRAPH画图心得

    OleDbConnection odcConnection = new OleDbConnection(MyConnectionString); //打开连接 C#操作Access之按列读取mdb o ...

  7. 使用MySQLTuner-perl对MySQL进行优化

    项目地址https://github.com/major/MySQLTuner-perl.git 抄一把说明,不翻译了,累-- MySQLTuner is a script written in Pe ...

  8. SWIFT推送之本地推送(UILocalNotification)

    本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. 1.首 ...

  9. ZOJ 17届校赛 How Many Nines

    If we represent a date in the format YYYY-MM-DD (for example, 2017-04-09), do you know how many 9s w ...

  10. Web Components 是什么

    /********************************************************************************* * Web Components ...