您的位置:

QRandomGenerator详解

一、qrandomgenerator头文件

QRandomGenerator是Qt中用于生成随机数的类。这个类定义在QRandomGenerator头文件中。一般情况下,在需要使用随机数的场景下,要包含此头文件。

#include <QRandomGenerator>

二、qrandomgenerator找不到,qrandomgenerator未定义,qrandomgenerator没有文件

如果编译时遇到上述错误,可能是因为没有在.pro文件中加入对应的QT模块。

QT += core

三、qrandomgenerator 未定义基类

一般情况下,我们使用QRandomGenerator类,不需要显式地继承它。如果是继承QRandomGenerator类,编译时可能会遭遇未定义基类错误。正确的方法应该是使用QRandomGenerator类的实例,而不是继承它。

四、qrandomgenerator生成随机数

QRandomGenerator提供了不同类型和范围的随机数生成方法。

// 返回一个无符号短整型的随机数
quint16 randomShort();

// 返回一个无符号整型的随机数
quint32 random();

// 返回一个无符号长整型的随机数
quint64 random64();

// 返回一个[0, 1]之间的浮点型的随机数
float generate();
double generate
   ();

// 返回一个在[min, max]之间的随机数,包括min和max
int bounded(int min, int max);
unsigned int bounded(unsigned int min, unsigned int max);
qint64 bounded(qint64 min, qint64 max);
quint64 bounded(quint64 min, quint64 max);

   
  

五、qrandomgenerator 5.12.3

在Qt 5.12.3版本中,QRandomGenerator被增强了。现在,您可以使用跨平台API函数SecRandomCopyBytes(苹果)或CryptGenRandom(Windows)来获取更高质量的生成的随机数字。为此,QRandomGenerator新增了构造函数,如下所示:

// 生成更安全的随机数
QRandomGenerator(QRandomGenerator::SecurelySeeded)

// 指定种子的随机数
QRandomGenerator(quint32 seed)

六、代码示例

// 生成一个10~100之间的随机数
qint32 number = QRandomGenerator::global()->bounded(10, 100);

// 生成一个指定长度的随机字符串
QString randomString(int length)
{
    static const QString chars(QStringLiteral("abcdefghijklmnopqrstuvwxyz"
                                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                              "0123456789"));
    static QRandomGenerator generator(static_cast<quint32>(QTime(0, 0, 0).secsTo(QTime::currentTime())));

    QString result;
    result.reserve(length);
    while (length--) {
        result.append(chars.at(generator.bounded(chars.length())));
    }
    return result;
}

七、总结

本文对QRandomGenerator进行了详细的阐述。我们可以看到,QRandomGenerator提供了多种类型和范围的随机数生成方法,并在Qt 5.12.3版本中进一步增强,能够生成更高质量的随机数。