1.生成随机数

生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。

下列代码生成了[0,9]之间的10个随机数。

  1. void generateRandomNumber()

  2. {

  3. qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

  4. for(int i=0; i<10; i++)

  5. {

  6. int test =qrand()%10;

  7. qDebug()<<test;

  8. }

  9. }

注意代码中使用的种子,这里没有用固定值来作为种子,是希望函数在每次调用(间隔大于1秒)时生成的随机数不一样。

2.生成不重复的随机数

这个没有特别好的方法,需要自己手动计算,代码如下。

  1. void generateUniqueRandomNumber()

  2. {

  3. int i,j;

  4. QList<int> numbersList;

  5. qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

  6. for(i=0;i<10;i++)

  7. {

  8. numbersList.append(qrand()%10);

  9. bool flag=true;

  10. while(flag)

  11. {

  12. for(j=0;j<i;j++)

  13. {

  14. if(numbersList[i]==numbersList[j])

  15. {

  16. break;

  17. }

  18. }

  19. if(j<i)

  20. {

  21. numbersList[i]=rand()%10;

  22. }

  23. if(j==i)

  24. {

  25. flag=!flag;

  26. }

  27. }

  28. }

  29. for(i=0;i<10;i++)

  30. {

  31. qDebug()<<numbersList[i];

  32. }

  33. }

3.生成递增的随机数
        就是在随机数生成后进行排序,Qt提供了一个非常好用的排序函数qSort,详细的用法可参考Qt帮助。

  1. void generateAscendRandomNumber()

  2. {

  3. int i;

  4. QList<int> numbersList;

  5. qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

  6. for(i=0;i<10;i++)

  7. {

  8. numbersList.append(qrand()%10);

  9. }

  10. qSort(numbersList.begin(),numbersList.end());

  11. for(i=0;i<10;i++)

  12. {

  13. qDebug()<<numbersList[i];

  14. }

  15. }

输出结果如下所示,可以看出qSort默认递增排序,即使数列中包含相同的数。

芭蕉树上第十九根芭蕉-- Qt生成随机数的方法相关推荐

  1. 操作系统(十九)进程互斥的软件实现方法

    2.3.2 进程互斥的软件实现方法 目录 2.3.2 进程互斥的软件实现方法 2.3.2.1 单标志法 2.3.2.2 双标志先检查法 2.3.2.3 双标志后检查法 2.3.2.4 Peterson ...

  2. 五十九、使用ZXing生成二维码

    @Author:Runsen @Date:2020/7/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  3. Qt生成随机数-qrand及QRandomGenerator

    //老方法 //利用qrand和qsrand生成随机数 //位于QtGlobal中 //例,生成一个0和10之间的随机数 qsrand(QTime::currentTime().msec()); // ...

  4. 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. 【正点原子Linux连载】 第十九章 CAN Bus 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 3)全套实验源码+手册+视频下载地址: ...

  6. OpenGL(十九)——Qt OpenGL波动纹理(旗子的飘动效果)

    OpenGL(十九)--Qt OpenGL波动纹理(旗子的飘动效果) 一.场景 在日常的项目中,我们经常会实现波动的一些纹理效果,比如飘动的旗子,水的波纹,地图上某一点的波浪圈圈等...,本篇介绍波动 ...

  7. Python界面编程第十九课:Pyside2 (Qt For Python)创建菜单

    先看完整代码: from PySide2.QtWidgets import QApplication,QMainWindow, QAction import sys from PySide2.QtGu ...

  8. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  9. 如何选择适合你的兴趣爱好(二十九),少林

    围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第二十九讲--少林.少林是中华武术中体系最庞大的门派,武功套路高达七百种以上,又因以禅入武,习武修禅,又有「武术禅 ...

  10. 微信小程序从入坑到放弃二十九:一个小场景搞懂冒泡事件bindtap和catchtap的区别

    摘要: 在微信小程序中,bindtap事件会产生冒泡,若不加以拦截,会一直冒泡到顶端.在某些情况下,一次点击会触发若干点击事件.为了防止冒泡,使用catchtap即可解决问题.在有全屏半透明背景的弹出 ...

最新文章

  1. .NET调用JAVA的WebService方法
  2. 基于云的SD-WAN骨干接入服务
  3. Cytology: Diagnostic Principles and Clinical Correlates 细胞学: 诊断原则与临床相关性 PDF
  4. linux调度全景指南
  5. Debian GNU/Linux 的发展简史
  6. JS-面向对象--创建具有私有属性的对象(2个方法)
  7. Linux创建名为vgtest的分区,第五周作业,
  8. 小赛毛游C记——初始C语言(4)
  9. 集成灶哪个品牌性价比高质量好,过来人实话实说?
  10. 带符号整数中负数采用什么编码_转载:二进制编码--负数
  11. hpc超级计算机大会,国家超算广州中心主任卢宇彤当选HPC 2019大会程序主席
  12. Android加载预览PDF文件
  13. 智能时代为什么需要区块链技术?
  14. 【腾讯TMQ】基于模型的自动化测试工具——GraphWalker
  15. 2.1 Oracle 服务器
  16. 解决无线网卡工作一段时间USB就自动断开连接(by liukun321咕唧咕唧)
  17. Python 实现串口调试助手
  18. 如何在 Linux 系统中判断安装、使用了多少内存 | Linux 中国
  19. 什么软件可以识别图片上的文字?这些软件值得收藏
  20. 高空间分辨率的遥感数据源及其所在遥感平台、传感器特点

热门文章

  1. pycharm新建项目时选择virtualenv与existing interpreter
  2. 在vscode拉取代码时would clobber existing tag
  3. 最全的LBS手机定位技术说明
  4. Mac修改登陆界面背景图片,开机登陆界面,替换沙漠背景图 @macOS Mojave - 10.14.x
  5. linux消息分发机制,RabbitMQ消息分发轮询和Message Acknowledgment
  6. Serialize Your Deck with Positron [XML Serialization, XSD, C#]
  7. Mongodb: Sort operation used more than the maximum 33554432 bytes of RAM
  8. Oracle RMAN无法删除归档一例
  9. SRAM与DRAM的区别
  10. 个人邮箱怎么注册?手机怎么注册个人邮箱呢?