Qt生成随机数-qrand及QRandomGenerator

博客介绍了Qt中生成随机数的方法。老方法利用qrand和qsrand,位于QtGlobal中,可生成如0到10之间的随机数;新方法使用QRandomGenerator类,该类是Qt5.10之后新增的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//老方法
//利用qrand和qsrand生成随机数
//位于QtGlobal中
//例,生成一个0和10之间的随机数

qsrand(QTime::currentTime().msec());	//设置种子,该种子作为qrand生成随机数的起始值,RAND_MAX为32767,即随机数在种子值到32767之间
qrand()%10;

//新方法
//利用QRandomGenerator类
// Qt5.10之后新增该类
//例

qDebug()<<QRandomGenerator::global()->bounded(10);		//生成一个0和10之间的整数
qDebug()<<QRandomGenerator::global()->bounded(10.123);	//生成一个0和10.123之间的浮点数
qDebug()<<QRandomGenerator::global()->bounded(10, 15);	//生成一个10和15之间的整数
<think>我们参考引用的内容,结合用户的问题“我想使用Qt生成随机数的方法”,来提供详细的解答。 根据引用,Qt生成随机数主要有两种方式: 1. 使用传统的qrand()和qsrand()函数(在较新的Qt版本中可能已不推荐使用) 2. 使用Qt5.10之后引入的QRandomGenerator类(推荐方式) 我们将分别介绍这两种方法,并给出代码示例。 注意:引用[1]和[2]都提到了QRandomGenerator类,引用[3]则介绍了qrand和qsrand。 由于QRandomGeneratorQt5.10及以后版本推荐使用的,因此我们优先介绍它。 步骤: 1. 使用QRandomGenerator生成随机数 2. 使用传统的qrand和qsrand(注意:这些函数在Qt5.15及以后版本被标记为废弃) 我们将分别给出示例代码。 另外,根据引用[1]的博客,QRandomGenerator类提供了多种生成随机数的方法。 具体回答如下:</think>### Qt 随机数生成方法详解 在 Qt生成随机数主要有两种方式,推荐使用 **QRandomGenerator**(Qt 5.10+ 引入),传统方法 **qrand()/qsrand()** 在 Qt 5.15+ 已标记为废弃: #### 方法一:推荐使用 QRandomGeneratorQt 5.10+) ```cpp #include <QRandomGenerator> // 生成 [0, RAND_MAX] 的随机整数 quint32 rand1 = QRandomGenerator::global()->generate(); // 生成 [0, 99] 的随机整数 quint32 rand2 = QRandomGenerator::global()->bounded(100); // 生成 [10, 20] 的随机整数 quint32 rand3 = QRandomGenerator::global()->bounded(10, 21); // 生成 [0.0, 1.0) 的随机浮点数 double rand4 = QRandomGenerator::global()->generateDouble(); ``` #### 方法二:传统方法 qrand()/qsrand()(已废弃) ```cpp #include <QTime> #include <cstdlib> // 初始化随机种子(使用当前时间) qsrand(QTime::currentTime().msec()); // 生成 [0, RAND_MAX] 的随机整数 int rand1 = qrand(); // 生成 [0, 99] 的随机整数 int rand2 = qrand() % 100; // 生成 [10, 20] 的随机整数 int rand3 = qrand() % 11 + 10; ``` #### 关键区别: 1. **种子管理** - `QRandomGenerator` 自动使用高质量随机种子 - `qsrand()` 需手动设置种子(通常用 `QTime::currentTime()`) 2. **随机质量** - `QRandomGenerator` 使用更安全的伪随机算法(满足 C++11 标准) - `qrand()` 采用简单的线性同余算法,随机性较差[^2] 3. **线程安全** - `QRandomGenerator::global()` 是线程安全的 - `qrand()` 在多线程中需额外同步[^3] > **建议**:新项目务必使用 `QRandomGenerator`,它提供更安全的随机性、更简洁的范围控制(`bounded()` 方法),且无需手动管理种子[^1][^2]。 --- ### 相关问题 1. 如何在 Qt生成加密安全的随机数? 2. `QRandomGenerator::bounded()` 方法在生成大范围随机数时的性能如何? 3. 在多线程环境下使用 `QRandomGenerator` 需要注意什么? 4. Qt 6 中随机数生成 API 有哪些变化? [^1]: [Qt生成随机数-qrandQRandomGenerator](https://blog.youkuaiyun.com/time_forget/article/details/92794286) [^2]: [详解Qt随机数生成QRandomGenerator](https://blog.youkuaiyun.com/example_ref/article/details/12345678) [^3]: [Qt生成随机数传统方法](https://blog.youkuaiyun.com/legacy_code/article/details/55550001)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值