You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT/C++中QRandomGenerator始终生成相同值的问题求助

QRandomGenerator每次生成相同数值的解决方法

问题原因

你每次执行这段代码时都新建了一个QRandomGenerator对象,默认构造的QRandomGenerator会用固定的默认种子初始化,导致每次生成的随机序列完全一致,所以每次都会得到第一个值0,自然一直返回dmpcY1。

解决步骤

1. 复用QRandomGenerator实例并正确初始化

不要每次创建新的实例,应该把它定义为类成员变量或者全局变量,并且用系统随机源初始化种子,确保每次程序运行的随机序列都不一样。

比如在类的头文件里声明:

#include <QRandomGenerator>

class YourClass : public QWidget {
    Q_OBJECT
private:
    QRandomGenerator m_rng; // 类成员的随机生成器
};

然后在类的构造函数里初始化:

YourClass::YourClass(QWidget *parent) : QWidget(parent),
    m_rng(QRandomGenerator::system()) // 用系统随机源初始化种子
{
    // 其他初始化代码
}

2. 简化随机选择逻辑

把所有目标向量放到一个容器里,避免冗长的if-else判断,直接通过随机索引取值:

// 替换你的原有逻辑,这里的YourVectorType要换成你实际的向量类型
QVector<YourVectorType> dmps = {dmpcY1, dmpcY2, dmpcY3, dmpcY4, dmpcY5, dmpcY6, dmpcY7};
int index = m_rng.bounded(dmps.size()); // 用容器大小自动适配,不用硬编码数字
return dmps[index];

这样每次点击按钮时,都会从m_rng的序列里取下一个随机数,不会重复得到相同的索引。

额外说明

  • 如果用全局变量的话,初始化可以这样写:
QRandomGenerator g_rng(QRandomGenerator::system());

之后在函数里直接调用g_rng.bounded(...)即可。

  • 核心问题就是不要每次调用都新建QRandomGenerator实例,固定种子的重复初始化才会导致相同结果。

内容的提问来源于stack exchange,提问作者pgogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:40:58