Sur cette page

QRandomGenerator Class

La classe QRandomGenerator permet d'obtenir des valeurs aléatoires à partir d'un générateur de nombres aléatoires de haute qualité. En savoir plus...

En-tête : #include <QRandomGenerator>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérité par :

QRandomGenerator64

Remarque : toutes les fonctions de cette classe sont réentrantes.

Remarque : ces fonctions sont également sûres pour les threads:

Types publics

Fonctions publiques

QRandomGenerator(quint32 seedValue = 1)
QRandomGenerator(const quint32 (&seedBuffer)[N])
QRandomGenerator(std::seed_seq &sseq)
QRandomGenerator(const quint32 *begin, const quint32 *end)
QRandomGenerator(const quint32 *seedBuffer, qsizetype len)
QRandomGenerator(const QRandomGenerator &other)
~QRandomGenerator()
double bounded(double highest)
int bounded(int highest)
qint64 bounded(qint64 highest)
quint32 bounded(quint32 highest)
quint64 bounded(quint64 highest)
int bounded(int lowest, int highest)
qint64 bounded(int lowest, qint64 highest)
qint64 bounded(qint64 lowest, int highest)
qint64 bounded(qint64 lowest, qint64 highest)
quint32 bounded(quint32 lowest, quint32 highest)
quint64 bounded(quint64 lowest, quint64 highest)
quint64 bounded(quint64 lowest, unsigned int highest)
quint64 bounded(unsigned int lowest, quint64 highest)
void discard(unsigned long long z)
void fillRange(UInt (&buffer)[N])
void fillRange(UInt *buffer, qsizetype count)
quint64 generate64()
quint32 generate()
void generate(ForwardIterator begin, ForwardIterator end)
double generateDouble()
void seed(quint32 seed = 1)
void seed(std::seed_seq &seed)
QRandomGenerator::result_type operator()()

Membres publics statiques

QRandomGenerator *global()
QRandomGenerator::result_type max()
QRandomGenerator::result_type min()
QRandomGenerator securelySeeded()
QRandomGenerator *system()
bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)

Description détaillée

QRandomGenerator peut être utilisé pour générer des valeurs aléatoires à partir d'un générateur de nombres aléatoires de haute qualité. À l'instar des moteurs aléatoires C++, QRandomGenerator peut être initialisé avec des valeurs fournies par l'utilisateur via le constructeur. Une fois initialisé, la séquence de nombres générée par cette classe est déterministe. Autrement dit, à partir des mêmes données d'initialisation, QRandomGenerator générera la même séquence de nombres. En revanche, avec des données d'initialisation différentes, les résultats devraient être considérablement différents.

QRandomGenerator::securelySeededLa fonction () permet de créer un QRandomGenerator initialisé de manière sécurisée à l’aide de ` QRandomGenerator::system()`, ce qui signifie que la séquence de nombres qu’il génère ne peut pas être facilement prédite. De plus, la méthode ` QRandomGenerator::global()` renvoie une instance globale de `QRandomGenerator` dont Qt garantit l'initialisation sécurisée. Cet objet est thread-safe, peut être partagé pour la plupart des utilisations et est toujours initialisé à partir de ` QRandomGenerator::system()`

QRandomGenerator::system() peut être utilisée pour accéder au générateur aléatoire cryptographiquement sécurisé du système. Sur les systèmes Unix, cela équivaut à une lecture à partir de /dev/urandom ou des appels système getrandom() ou getentropy().

La classe peut générer des nombres de 32 ou 64 bits, ou remplir un tableau de ces valeurs. La manière la plus courante de générer de nouvelles valeurs consiste à appeler les fonctions ` generate()`, ` generate64()` ou ` fillRange()`. On l'utiliserait ainsi :

    quint32 value = QRandomGenerator::global()->generate();

De plus, elle fournit une fonction à virgule flottante generateDouble() qui renvoie un nombre compris dans l’intervalle [0, 1) (c’est-à-dire incluant zéro et excluant 1). Il existe également un ensemble de fonctions pratiques qui facilitent l’obtention d’un nombre aléatoire dans un intervalle entier et borné.

Graine et déterminisme

QRandomGenerator peut être initialisé avec des données de départ spécifiques. Dans ce cas, les nombres générés par l’objet seront toujours les mêmes, comme dans l’exemple suivant :

    QRandomGenerator prng1(1234), prng2(1234);
    Q_ASSERT(prng1.generate() == prng2.generate());
    Q_ASSERT(prng1.generate64() == prng2.generate64());

La graine se présente sous la forme d’un ou plusieurs mots de 32 bits. La taille idéale de la graine est approximativement égale à la taille de la classe QRandomGenerator elle-même. En raison du mélange des données de graine, QRandomGenerator ne peut garantir que des graines distinctes produiront des séquences différentes.

QRandomGenerator::global(), comme tous les générateurs créés par ` QRandomGenerator::securelySeeded()`, est toujours initialisé à partir de ` QRandomGenerator::system()`, il n’est donc pas possible de le faire produire des séquences identiques.

Données en masse

En mode déterministe, QRandomGenerator peut être utilisé pour la génération de données en masse. En effet, il est conseillé aux applications qui n’ont pas besoin de données cryptographiquement sécurisées ou véritablement aléatoires d’utiliser un QRandomGenerator standard plutôt que QRandomGenerator::system() pour leurs besoins en données aléatoires.

Pour faciliter son utilisation, QRandomGenerator fournit un objet global facile à utiliser, comme dans l'exemple suivant :

    int x = QRandomGenerator::global()->generate();
    int y = QRandomGenerator::global()->generate();
    int w = QRandomGenerator::global()->bounded(16384);
    int h = QRandomGenerator::global()->bounded(16384);

Générateur de nombres aléatoires à l’échelle du système

QRandomGenerator::system() peut être utilisée pour accéder au générateur de nombres aléatoires à l’échelle du système, qui est cryptographiquement sûr sur tous les systèmes sur lesquels Qt s’exécute. Cette fonction utilisera les fonctionnalités matérielles pour générer des nombres aléatoires lorsqu’elles sont disponibles. Sur ces systèmes, ces fonctionnalités constituent de véritables générateurs de nombres aléatoires. Cependant, même s’il s’agit de véritables générateurs de nombres aléatoires, ces fonctionnalités disposent de sources d’entropie finies et peuvent donc ne plus produire de résultats si leur réserve d’entropie est épuisée.

Si cela se produit, le système d’exploitation, puis QRandomGenerator, se rabattront sur des générateurs de nombres pseudo-aléatoires de qualité décroissante (le générateur de secours de Qt étant le plus simple). La qualité cryptographique de ces générateurs dépend de l’implémentation. Par conséquent, la fonction QRandomGenerator::system() ne doit pas être utilisée pour la génération de nombres aléatoires à haute fréquence, sous peine de vider le réservoir d’entropie. En règle générale, cette classe ne doit pas être sollicitée pour générer plus d’un kilo-octet par seconde de données aléatoires (remarque : cela peut varier d’un système à l’autre).

Si une application a besoin de données provenant d’un véritable générateur aléatoire (RNG) en grande quantité, elle doit utiliser directement les fonctionnalités du système d’exploitation (telles que ` /dev/random ` sous Linux) et attendre que de l’entropie soit disponible. Si l’application nécessite des moteurs PRNG de qualité cryptographique mais ne requiert pas de véritable aléatoire, ` QRandomGenerator::system()` peut tout de même être utilisé (voir la section ci-dessous).

Si ni un générateur aléatoire véritable (RNG), ni un générateur aléatoire pseudo-aléatoire (PRNG) cryptographiquement sécurisé (CSPRNG) ne sont requis, les applications doivent plutôt utiliser des moteurs PRNG tels que le mode déterministe de QRandomGenerator et ceux de la bibliothèque standard C++. La fonction QRandomGenerator::system() peut être utilisée pour les initialiser.

Qualité de secours

QRandomGenerator::system() utilise les fonctionnalités du système d'exploitation pour obtenir des nombres aléatoires, qui tentent de collecter de l'entropie réelle dans l'environnement environnant afin de produire de véritables nombres aléatoires. Cependant, il est possible que le réservoir d'entropie s'épuise, auquel cas le système d'exploitation se rabattra temporairement sur un générateur pseudo-aléatoire. En aucun cas, la fonction ` QRandomGenerator::system()` ne se bloquera en attendant que davantage d’entropie soit collectée.

Les systèmes d'exploitation suivants garantissent que les résultats de leur API de génération aléatoire seront d’une qualité au moins sûre sur le plan cryptographique, même si le réservoir d’entropie est épuisé : les systèmes d’exploitation Apple (Darwin), les BSD, Linux et Windows. Sauf en cas de problème d’installation du système (tel que l’inaccessibilité de ` /dev/urandom ` par le processus en cours), ` QRandomGenerator::system()` bénéficiera donc des mêmes garanties.

Sur les autres systèmes d’exploitation, QRandomGenerator se rabattra sur un générateur aléatoire pseudo-aléatoire (PRNG) présentant une bonne distribution numérique, mais il ne peut garantir une initialisation correcte dans tous les cas. Veuillez consulter la documentation du système d’exploitation pour plus d’informations.

Il est conseillé aux applications qui exigent que QRandomGenerator ne recoure pas à des générateurs de qualité non cryptographique de consulter la documentation de leur système d’exploitation ou de limiter leur déploiement à l’un des systèmes mentionnés ci-dessus.

À partir de Qt 6.12, QRandomGenerator affiche un avertissement sur stderr la première fois qu’il recourt à un PRNG non sécurisé. L’option randomgenerator_disable_fallback peut être activée lors de la compilation de Qt pour désactiver ce recours non sécurisé et, à la place, mettre fin à l’application si celle-ci tente d’utiliser QRandomGenerator alors que CSPRNG n’est pas disponible.

Réentrance et sécurité des threads

QRandomGenerator est réentrant, ce qui signifie que plusieurs threads peuvent opérer sur cette classe simultanément, à condition qu’ils agissent sur des objets différents. Si plusieurs threads doivent partager une même séquence PRNG, un verrouillage externe via un mutex est nécessaire.

Les objets renvoyés par les fonctions ` QRandomGenerator::global()` et ` QRandomGenerator::system()` constituent une exception : ces objets sont sûrs pour les threads et peuvent être utilisés par n’importe quel thread sans verrouillage externe. Notez que la sécurité des threads ne s’étend pas à la copie de ces objets : ils doivent toujours être utilisés par référence.

Compatibilité avec la bibliothèque standard C++

QRandomGenerator s’inspire des exigences relatives aux générateurs de nombres aléatoires de la bibliothèque standard C++ et peut être utilisé dans presque tous les contextes où les générateurs de la bibliothèque standard peuvent l’être. Les exceptions à ces exigences sont les suivantes :

  • QRandomGenerator ne prend pas en charge l’initialisation à partir d’une autre classe de type « séquence de graines » que std::seed_seq elle-même ;
  • QRandomGenerator n’est pas comparable (mais est copiable) ni compatible avec les flux vers std::ostream ou depuis std::istream.

QRandomGenerator est également compatible avec les classes de distribution uniforme std::uniform_int_distribution et std:uniform_real_distribution, ainsi qu’avec la fonction libre std::generate_canonical. Par exemple, le code suivant peut être utilisé pour générer un nombre à virgule flottante dans l’intervalle [1, 2,5) :

    std::uniform_real_distribution<> dist(1, 2.5);
    return dist(*QRandomGenerator::global());

Voir également QRandomGenerator64.

Documentation sur les types de membres

QRandomGenerator::result_type

Une définition de type (typedef) correspondant au type renvoyé par la fonction operator(). C'est-à-dire « quint32 ».

Voir également operator().

Documentation des fonctions membres

QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)

Initialise cet objet `QRandomGenerator` en utilisant la valeur ` seedValue ` comme graine. Deux objets créés ou réinitialisés avec la même valeur de graine produiront la même séquence de nombres.

Voir également seed() et securelySeeded().

template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&seedBuffer)[N])

Initialise cet objet `QRandomGenerator` en utilisant comme graine les valeurs contenues dans le tableau ` seedBuffer `. Deux objets créés ou réinitialisés avec la même valeur de graine produiront la même suite de nombres.

Il s'agit d'une fonction surchargée.

Voir également seed() et securelySeeded().

[noexcept] QRandomGenerator::QRandomGenerator(std::seed_seq &sseq)

Initialise cet objet QRandomGenerator en utilisant la séquence de départ sseq comme graine. Deux objets créés ou réinitialisés avec la même valeur de graine produiront la même séquence de nombres.

Il s'agit d'une fonction surchargée.

Voir également seed() et securelySeeded().

QRandomGenerator::QRandomGenerator(const quint32 *begin, const quint32 *end)

Initialise cet objet `QRandomGenerator` en utilisant comme graine les valeurs comprises entre begin et end. Deux objets créés ou réinitialisés avec la même valeur de graine produiront la même séquence de nombres.

Ce constructeur est équivalent à :

    std::seed_seq sseq(begin, end);
    QRandomGenerator generator(sseq);

Il s'agit d'une fonction surchargée.

Voir également seed() et securelySeeded().

QRandomGenerator::QRandomGenerator(const quint32 *seedBuffer, qsizetype len)

Initialise cet objet `QRandomGenerator` en utilisant comme graine les valeurs d'len s contenues dans le tableau ` seedBuffer `. Deux objets créés ou réinitialisés avec la même valeur de graine produiront la même séquence de nombres.

Ce constructeur équivaut à :

    std::seed_seq sseq(seedBuffer, seedBuffer + len);
    QRandomGenerator generator(sseq);

Il s'agit d'une fonction surchargée.

Voir également seed() et securelySeeded().

QRandomGenerator::QRandomGenerator(const QRandomGenerator &other)

Crée une copie de l’état du générateur dans l’objet ` other `. Si ` other ` est de type ` QRandomGenerator::system()` ou une copie de celui-ci, cet objet lira également à partir des fonctions de génération aléatoire du système d’exploitation. Dans ce cas, les séquences générées par les deux objets seront différentes.

Dans tous les autres cas, le nouvel objet `QRandomGenerator` commencera à la même position dans la séquence déterministe que l’objet ` other `. Les deux objets généreront alors la même séquence à partir de ce point.

C’est pourquoi il n’est pas recommandé de créer une copie de ` QRandomGenerator::global()`. Si vous avez besoin d’un générateur déterministe exclusif, envisagez plutôt d’utiliser ` securelySeeded()` pour obtenir un nouvel objet n’ayant aucun lien avec ` QRandomGenerator::global()`.

[constexpr noexcept default] QRandomGenerator::~QRandomGenerator()

Supprime l'instance de ` QRandomGenerator`.

double QRandomGenerator::bounded(double highest)

Génère un nombre double aléatoire compris entre 0 (inclus) et highest (exclus). Cette fonction est équivalente à et est implémentée comme suit :

    return generateDouble() * highest;

Si le paramètre highest est négatif, le résultat sera également négatif ; s'il est infini ou NaN, le résultat sera également infini ou NaN (c'est-à-dire non aléatoire).

Voir également generateDouble() et bounded(quint64).

int QRandomGenerator::bounded(int highest)

Génère un nombre aléatoire de 32 bits compris entre 0 (inclus) et highest (exclus). La valeur de ` highest ` doit être positive.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs couvrant toute la plage de 32 bits du type int. Utilisez plutôt la fonction generate() et effectuez une conversion vers le type int.

Il s'agit d'une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

qint64 QRandomGenerator::bounded(qint64 highest)

Génère un nombre aléatoire de 64 bits compris entre 0 (inclus) et highest (exclus). highest doit être positif.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs sur toute la plage de 64 bits de qint64. Utilisez plutôt generate64() et effectuez un transtypage vers qint64, ou utilisez la version non signée de cette fonction.

Remarque : cette fonction est implémentée sous forme de boucle, dont le nombre d’itérations dépend de la valeur aléatoire obtenue. À long terme, elle devrait s’exécuter en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l’exécution de cette fonction peut prendre considérablement plus de temps.

Il s'agit d'une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

quint32 QRandomGenerator::bounded(quint32 highest)

Génère une valeur aléatoire de 32 bits comprise entre 0 (inclus) et highest (exclus). On peut également obtenir le même résultat en utilisant std::uniform_int_distribution avec les paramètres 0 et highest - 1. Cette classe peut également être utilisée pour obtenir des nombres supérieurs à 32 bits ; pour 64 bits, on peut également utiliser la surcharge de la fonction bounded() à 64 bits.

Par exemple, pour obtenir une valeur comprise entre 0 et 255 (inclus), on écrirait :

    quint32 v = QRandomGenerator::global()->bounded(256);

Bien entendu, on pourrait également obtenir le même résultat en masquant le résultat de ` generate()` pour ne conserver que les 8 bits de poids faible. Les deux solutions sont aussi efficaces l’une que l’autre.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans toute la plage de 32 bits de `quint32`. Utilisez plutôt ` generate()`.

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

quint64 QRandomGenerator::bounded(quint64 highest)

Génère un nombre aléatoire de 64 bits compris entre 0 (inclus) et highest (exclus). On peut également obtenir le même résultat en utilisant std::uniform_int_distribution<quint64> avec les paramètres 0 et highest - 1.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans l'intervalle complet de 64 bits de quint64. Utilisez plutôt generate64().

Remarque : cette fonction est implémentée sous forme de boucle, dont le nombre d'itérations dépend de la valeur aléatoire obtenue. À long terme, elle devrait s'exécuter en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l'exécution de cette fonction peut prendre considérablement plus de temps.

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

int QRandomGenerator::bounded(int lowest, int highest)

Génère une valeur aléatoire de 32 bits comprise entre lowest (inclus) et highest (exclus), ces deux valeurs pouvant être négatives, mais highest doit être supérieur à lowest.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans toute la plage de 32 bits du type int. Utilisez plutôt generate() et effectuez un transtypage vers int.

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

qint64 QRandomGenerator::bounded(int lowest, qint64 highest)

qint64 QRandomGenerator::bounded(qint64 lowest, int highest)

quint64 QRandomGenerator::bounded(quint64 lowest, unsigned int highest)

quint64 QRandomGenerator::bounded(unsigned int lowest, quint64 highest)

Cette fonction sert à faciliter la résolution des surcharges lorsque les types des paramètres ne correspondent pas exactement. Elle convertit le type le plus petit en celui du plus grand et appelle la surcharge appropriée.

qint64 QRandomGenerator::bounded(qint64 lowest, qint64 highest)

Génère un nombre aléatoire de 64 bits compris entre lowest (inclus) et highest (exclus), ces deux valeurs pouvant être négatives, mais highest doit être supérieur à lowest.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans toute la plage de 64 bits de qint64. Utilisez plutôt generate64() et effectuez une conversion vers qint64.

Remarque : cette fonction est implémentée sous forme de boucle, dont le nombre de répétitions dépend de la valeur aléatoire obtenue. À long terme, elle devrait s’exécuter en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l’exécution de cette fonction peut prendre considérablement plus de temps.

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

quint32 QRandomGenerator::bounded(quint32 lowest, quint32 highest)

Génère un nombre aléatoire de 32 bits compris entre lowest (inclus) et highest (exclus). Le paramètre highest doit être supérieur à lowest.

On peut également obtenir le même résultat en utilisant std::uniform_int_distribution avec les paramètres lowest et \a highest - 1. Cette classe peut également être utilisée pour obtenir des nombres supérieurs à 32 bits.

Par exemple, pour obtenir une valeur comprise entre 1 000 (inclus) et 2 000 (exclus), on écrirait :

    quint32 v = QRandomGenerator::global()->bounded(1000, 2000);

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans toute la plage de 32 bits de quint32. Utilisez plutôt generate().

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

quint64 QRandomGenerator::bounded(quint64 lowest, quint64 highest)

Génère un nombre aléatoire de 64 bits compris entre lowest (inclus) et highest (exclus). Le paramètre highest doit être supérieur à lowest.

On peut également obtenir le même résultat en utilisant std::uniform_int_distribution<quint64> avec les paramètres lowest et \a highest - 1.

Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans toute la plage 64 bits de quint64. Utilisez plutôt generate64().

Remarque : cette fonction est implémentée sous la forme d’une boucle, dont le nombre d’itérations dépend de la valeur aléatoire obtenue. À long terme, elle devrait s’exécuter en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l’exécution de cette fonction peut prendre considérablement plus de temps.

Il s’agit d’une fonction surchargée.

Voir également generate(), generate64() et generateDouble().

void QRandomGenerator::discard(unsigned long long z)

Supprime les z entrées suivantes de la séquence. Cette méthode revient à appeler generate() z fois et à ignorer le résultat, comme dans :

    while (z--)
        generator.generate();

template < typename UInt, size_t N, QRandomGenerator::IfValidUInt<UInt> = true > void QRandomGenerator::fillRange(UInt (&buffer)[N])

Génère N des nombres de 32 ou 64 bits (selon le type UInt) et les stocke dans le tableau buffer. C’est le moyen le plus efficace d’obtenir plusieurs nombres à la fois, car cela réduit le nombre d’appels à la source du générateur de nombres aléatoires.

Par exemple, pour générer deux valeurs de 32 bits, on peut écrire :

    quint32 array[2];
    QRandomGenerator::global()->fillRange(array);

Il aurait également été possible d’effectuer un seul appel à generate64() puis de diviser la valeur de 64 bits en deux moitiés.

Voir également generate().

template <typename UInt, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)

Génère des valeurs de 32 ou 64 bits de type « count » (selon le type UInt) et les stocke dans le tampon pointé par buffer. Il s'agit du moyen le plus efficace d'obtenir plusieurs valeurs à la fois, car cela réduit le nombre d'appels à la source du générateur de nombres aléatoires.

Par exemple, pour remplir une liste de 16 entrées avec des valeurs aléatoires, on peut écrire :

    QList<quint32> list;
    list.resize(16);
    QRandomGenerator::global()->fillRange(list.data(), list.size());

Voir également generate().

quint64 QRandomGenerator::generate64()

Génère un nombre aléatoire de 64 bits et le renvoie.

Voir également operator()() et generate().

quint32 QRandomGenerator::generate()

Génère un nombre aléatoire de 32 bits et le renvoie.

Voir également operator()() et generate64().

template <typename ForwardIterator> void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)

Génère des quantités sur 32 bits et les stocke dans l'intervalle compris entre begin et end. Cette fonction est équivalente à (et est implémentée comme) :

    std::generate(begin, end, [this]() { return generate(); });

Cette fonction est conforme aux exigences de la fonction std::seed_seq::generate, qui exige des valeurs entières non signées de 32 bits.

Notez que si l'intervalle [début, fin) fait référence à une zone pouvant stocker plus de 32 bits par élément, les éléments seront tout de même initialisés avec seulement 32 bits de données. Tous les autres bits seront à zéro. Pour remplir l’intervalle avec des quantités de 64 bits, on peut écrire :

    std::generate(begin, end, []() { return QRandomGenerator::global()->generate64(); });

Si l'intervalle fait référence à de la mémoire contiguë (telle qu'un tableau ou les données d'un QList), la fonction fillRange() peut également être utilisée.

Voir également ` fillRange()`.

double QRandomGenerator::generateDouble()

Génère une valeur aléatoire de type qreal dans l'intervalle canonique [0, 1) (c'est-à-dire incluant zéro et excluant 1).

Cette fonction est équivalente à :

    QRandomGenerator64 rd;
    return std::generate_canonical<qreal, std::numeric_limits<qreal>::digits>(rd);

On peut également obtenir le même résultat en utilisant std::uniform_real_distribution avec les paramètres 0 et 1.

Voir également generate(), generate64() et bounded().

[static] QRandomGenerator *QRandomGenerator::global()

Renvoie un pointeur vers un objet ` QRandomGenerator ` partagé dont la valeur initiale a été définie à l'aide de la fonction ` securelySeeded()`. Cette fonction doit être utilisée pour générer des données aléatoires sans avoir à créer, ce qui est coûteux en ressources, un objet ` QRandomGenerator ` initialisé de manière sécurisée pour un usage spécifique, ni à stocker l'objet ` QRandomGenerator `, qui est relativement volumineux.

Par exemple, le code suivant génère une couleur RVB aléatoire :

    return QColor::fromRgb(QRandomGenerator::global()->generate());

Les accès à cet objet sont sûrs pour les threads ; il peut donc être utilisé dans n’importe quel thread sans verrouillage. L’objet peut également être copié, et la séquence produite par la copie sera identique à celle produite par l’objet partagé. Notez toutefois que si d’autres threads accèdent à l’objet global, ces threads peuvent obtenir des échantillons à des intervalles imprévisibles.

Remarque : cette fonction est sûre pour les threads.

Voir également securelySeeded() et system().

[static constexpr] QRandomGenerator::result_type QRandomGenerator::max()

Renvoie la valeur maximale que la fonction ` QRandomGenerator ` puisse jamais générer. Autrement dit, ` std::numeric_limits<result_type>::max()`.

Voir également min().

[static constexpr] QRandomGenerator::result_type QRandomGenerator::min()

Renvoie la valeur minimale que la fonction QRandomGenerator puisse jamais générer. À savoir, 0.

Voir également max().

[static] QRandomGenerator QRandomGenerator::securelySeeded()

Renvoie un nouvel objet ` QRandomGenerator ` dont la graine a été générée de manière sécurisée à l’aide de la fonction ` QRandomGenerator::system()`. Cette fonction permet d’obtenir la taille de graine idéale pour l’algorithme utilisé par ` QRandomGenerator ` ; il s’agit donc de la méthode recommandée pour créer un nouvel objet ` QRandomGenerator ` destiné à être conservé pendant un certain temps.

Compte tenu de la quantité de données nécessaire pour initialiser de manière sécurisée le moteur déterministe, cette fonction est relativement coûteuse et ne doit pas être utilisée pour des applications à court terme de QRandomGenerator (l'utiliser pour générer moins de 2 600 octets de données aléatoires revient en effet à gaspiller des ressources). Si l’utilisation ne nécessite pas autant de données, envisagez plutôt d’utiliser ` QRandomGenerator::global()` et de ne pas stocker d’objet ` QRandomGenerator `.

Voir également global() et system().

void QRandomGenerator::seed(quint32 seed = 1)

Réinitialise cet objet en utilisant la valeur seed comme graine.

[noexcept] void QRandomGenerator::seed(std::seed_seq &seed)

Réinitialise cet objet en utilisant la séquence de départ seed comme valeur de départ.

Il s'agit d'une fonction surchargée.

[static] QRandomGenerator *QRandomGenerator::system()

Renvoie un pointeur vers un générateur de nombres aléatoires partagé ( QRandomGenerator ) qui utilise systématiquement les fonctionnalités fournies par le système d’exploitation pour générer des nombres aléatoires. Ces fonctionnalités sont considérées comme cryptographiquement sûres au moins sur les systèmes d’exploitation suivants : les systèmes d’exploitation Apple (Darwin), les BSD, Linux et Windows. Cela peut également être le cas sur d’autres systèmes d’exploitation.

Elles peuvent également s’appuyer sur un véritable générateur de nombres aléatoires matériel. C’est pourquoi l’ QRandomGenerator e renvoyée par cette fonction ne doit pas être utilisée pour la génération de données en masse. Utilisez-la plutôt pour initialiser QRandomGenerator ou un moteur aléatoire issu de l’en-tête <random>.

L'objet renvoyé par cette fonction est sûr pour les threads et peut être utilisé dans n'importe quel thread sans verrouillage. Il peut également être copié ; l'QRandomGenerator qui en résulte accédera également aux fonctionnalités du système d'exploitation, mais ne générera pas la même séquence.

Remarque : cette fonction est sûre pour les threads.

Voir également securelySeeded() et global().

QRandomGenerator::result_type QRandomGenerator::operator()()

Génère un nombre aléatoire de 32 bits et le renvoie.

Voir aussi generate() et generate64().

Éléments non membres associés

bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)

Renvoie « true » si les deux moteurs rng1 et rng2 se trouvent dans des états différents ou si l'un d'eux effectue une lecture à partir des fonctionnalités du système d'exploitation et pas l'autre ; renvoie « false » dans le cas contraire.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.