相关函数    #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》 生成器和列表推导式

    一.初识生成器: 生成器就是自己用Python代码写的迭代器,生成器的本质就是迭代器. 1.Python中提供的生成器: 1.生成器函数: 使用yield语句而不是return语句返回结果.yield ...

  2. js常用用途

     页面元素查找 查找元素方法表达式                                                 返回值                            依据元 ...

  3. mysql|中主外键关系(转)

    http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标 ...

  4. Excel根据人名匹配得到编号

    操作步骤:输入公式 =IF(COUNTIF($E$2:$E2,$E2)>COUNTIF($B:$B,$E2),"",INDEX(C:C,SMALL(IF($B$1:$B$10 ...

  5. L211

    Violin prodigies (神童), I learned , have come in distinct waves from distinct regions . Most of the g ...

  6. SEL_CallFuncN,SEL_CallFuncO等的区别

    ocos2d-x中有大量的回调函数的应用,主要有以下几类,看下CCObject.h中的定义 typedef void (CCObject::*SEL_SCHEDULE)(float);// 用来调up ...

  7. Linux C 文件操作函数(~上善止水~)

    翻翻笔记,整理一下 C 语言中的文件操作函数 ~~~~~~,多注意细节,maybe 细节决定成败~ 1. fopen /* fopen(打开文件) * * 相关函数 open,fclose * * 表 ...

  8. Redis缓存系统-Java-Jedis操作Redis,基本操作以及 实现对象保存

    源代码下载:   http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 <dependency> <groupI ...

  9. Linux下mysql操作

    1.linux下MYSQL的启动与访问 http://www.cnblogs.com/hunter007/articles/2251795.html 2.linux下mysql基本的操作 http:/ ...

  10. Java中统计字符串中各个字符出现的次数

    import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo ...