Auf dieser Seite

QRandomGenerator Class

Die Klasse „QRandomGenerator“ ermöglicht es, Zufallswerte aus einem hochwertigen Zufallszahlengenerator zu beziehen. Mehr...

Header: #include <QRandomGenerator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Vererbt an:

QRandomGenerator64

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Hinweis: Diese Funktionen sind zudem threadsicher:

Öffentliche Typen

Öffentliche Funktionen

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()()

Statische öffentliche Mitglieder

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

Ausführliche Beschreibung

QRandomGenerator kann verwendet werden, um Zufallswerte aus einem hochwertigen Zufallszahlengenerator zu erzeugen. Wie die Zufallsgeneratoren in C++ kann auch QRandomGenerator über den Konstruktor mit vom Benutzer bereitgestellten Startwerten initialisiert werden. Bei Verwendung eines Startwerts ist die von dieser Klasse erzeugte Zahlenfolge deterministisch. Das heißt, bei gleichen Startdaten erzeugt QRandomGenerator dieselbe Zahlenfolge. Bei unterschiedlichen Startwerten sollten die Ergebnisse jedoch erheblich voneinander abweichen.

QRandomGenerator::securelySeededMit () lässt sich ein QRandomGenerator erstellen, der sicher mit „ QRandomGenerator::system()“ initialisiert wird, was bedeutet, dass die von ihm erzeugte Zahlenfolge nicht ohne Weiteres vorhersagbar ist. Darüber hinaus gibt ` QRandomGenerator::global()` eine globale Instanz von `QRandomGenerator` zurück, für die Qt sicherstellt, dass sie sicher initialisiert ist. Dieses Objekt ist threadsicher, kann für die meisten Anwendungen gemeinsam genutzt werden und wird stets über ` QRandomGenerator::system()` initialisiert

QRandomGenerator::system() verwendet werden, um auf den kryptografisch sicheren Zufallsgenerator des Systems zuzugreifen. Auf Unix-Systemen entspricht dies dem Auslesen aus ` /dev/urandom ` oder den Systemaufrufen ` getrandom() ` bzw. ` getentropy() `.

Die Klasse kann 32-Bit- oder 64-Bit-Werte generieren oder ein Array mit solchen Werten füllen. Die gängigste Methode zur Erzeugung neuer Werte ist der Aufruf der Funktionen ` generate()`, ` generate64()` oder ` fillRange()`. Die Verwendung sieht wie folgt aus:

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

Darüber hinaus bietet sie eine Gleitkommafunktion ` generateDouble()`, die eine Zahl im Bereich [0, 1) zurückgibt (d. h. einschließlich Null und ohne 1). Es gibt außerdem eine Reihe von Hilfsfunktionen, die das Erzeugen einer Zufallszahl in einem begrenzten, ganzzahligen Bereich erleichtern.

Startwert und Determinismus

Der `QRandomGenerator` kann mit bestimmten Startwerten initialisiert werden. Ist dies geschehen, sind die vom Objekt generierten Zahlen stets identisch, wie im folgenden Beispiel gezeigt:

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

Die Startwertdaten bestehen aus einem oder mehreren 32-Bit-Wörtern. Die ideale Startwertgröße entspricht in etwa der Größe der Klasse „QRandomGenerator“ selbst. Aufgrund der Vermischung der Startwertdaten kann „QRandomGenerator“ nicht garantieren, dass unterschiedliche Startwerte zu unterschiedlichen Sequenzen führen.

QRandomGenerator::global(), wie alle von ` QRandomGenerator::securelySeeded()` erstellten Generatoren, wird immer mit ` QRandomGenerator::system()` initialisiert, sodass es nicht möglich ist, ihn dazu zu bringen, identische Sequenzen zu erzeugen.

Massendaten

Im deterministischen Modus kann QRandomGenerator zur Erzeugung großer Datenmengen verwendet werden. Tatsächlich wird für Anwendungen, die keine kryptografisch sicheren oder echten Zufallsdaten benötigen, empfohlen, anstelle von ` QRandomGenerator::system()` einen regulären `QRandomGenerator` für ihren Bedarf an Zufallsdaten zu verwenden.

Zur Vereinfachung der Nutzung stellt QRandomGenerator ein globales Objekt bereit, das sich leicht verwenden lässt, wie im folgenden Beispiel gezeigt:

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

Systemweiter Zufallszahlengenerator

QRandomGenerator::system() kann verwendet werden, um auf den systemweiten Zufallszahlengenerator zuzugreifen, der auf allen Systemen, auf denen Qt läuft, kryptografisch sicher ist. Diese Funktion nutzt, sofern verfügbar, Hardwarefunktionen zur Erzeugung von Zufallszahlen. Auf solchen Systemen handelt es sich bei diesen Funktionen um echte Zufallszahlengeneratoren. Da es sich jedoch um echte RNGs handelt, verfügen diese Funktionen über endliche Entropiequellen und können daher möglicherweise keine Ergebnisse liefern, wenn ihr Entropievorrat erschöpft ist.

In diesem Fall greifen zunächst das Betriebssystem und anschließend QRandomGenerator auf Pseudozufallszahlengeneratoren mit abnehmender Qualität zurück (wobei der Fallback-Generator von Qt der einfachste ist). Ob diese Generatoren noch kryptografische Qualität aufweisen, ist implementierungsabhängig. Daher sollte ` QRandomGenerator::system()` nicht für die hochfrequente Zufallszahlengenerierung verwendet werden, damit der Entropievorrat nicht erschöpft wird. Als Faustregel gilt, dass diese Klasse nicht dazu verwendet werden sollte, mehr als ein Kilobyte Zufallsdaten pro Sekunde zu generieren (Hinweis: Dies kann von System zu System variieren).

Wenn eine Anwendung echte RNG-Daten in großen Mengen benötigt, sollte sie direkt auf die Funktionen des Betriebssystems (wie z. B. ` /dev/random ` unter Linux) zurückgreifen und warten, bis Entropie verfügbar wird. Wenn die Anwendung PRNG-Engines von kryptografischer Qualität, jedoch ohne echte Zufälligkeit benötigt, kann ` QRandomGenerator::system()` weiterhin verwendet werden (siehe Abschnitt unten).

Wenn weder ein echter Zufallsgenerator noch ein kryptografisch sicherer Pseudozufallsgenerator (CSPRNG) erforderlich sind, sollten Anwendungen stattdessen Pseudozufallsgeneratoren wie den deterministischen Modus von QRandomGenerator und diejenigen aus der C++-Standardbibliothek verwenden. QRandomGenerator::system() kann verwendet werden, um diese zu initialisieren.

Fallback-Qualität

QRandomGenerator::system() nutzt die Funktionen des Betriebssystems zur Erzeugung von Zufallszahlen, die versuchen, echte Entropie aus der Umgebung zu sammeln, um echte Zufallszahlen zu erzeugen. Es ist jedoch möglich, dass der Entropiepool erschöpft ist; in diesem Fall greift das Betriebssystem vorübergehend auf eine Pseudozufallsgenerator-Engine zurück. Unter keinen Umständen blockiert ` QRandomGenerator::system()` und wartet darauf, dass mehr Entropie gesammelt wird.

Die folgenden Betriebssysteme garantieren, dass die Ergebnisse ihrer API zur Zufallsgenerierung zumindest kryptografisch sichere Qualität aufweisen, selbst wenn der Entropiepool erschöpft ist: Apple-Betriebssysteme (Darwin), BSDs, Linux, Windows. Sofern kein Problem bei der Systeminstallation vorliegt (z. B. dass /dev/urandom für den aktuellen Prozess nicht lesbar ist), bietet QRandomGenerator::system() daher dieselben Garantien.

Auf anderen Betriebssystemen greift QRandomGenerator auf einen PRNG mit guter Zahlenverteilung zurück, kann jedoch nicht in allen Fällen eine korrekte Initialisierung garantieren. Weitere Informationen finden Sie in der Dokumentation des jeweiligen Betriebssystems.

Anwendungen, bei denen QRandomGenerator nicht auf Generatoren ohne kryptografische Qualität ausweichen darf, sollten die Dokumentation ihres Betriebssystems prüfen oder den Einsatz auf eines der oben genannten Betriebssysteme beschränken.

Ab Qt 6.12 gibt QRandomGenerator beim ersten Rückgriff auf einen unsicheren PRNG eine Warnung an „ stderr “ aus. Die Opt-in-Funktion „ randomgenerator_disable_fallback “ kann während des Qt-Builds gesetzt werden, um den unsicheren Fallback zu deaktivieren und stattdessen die Anwendung zu beenden, wenn sie versucht, QRandomGenerator zu verwenden, und CSPRNG nicht verfügbar ist.

Reentrancy und Thread-Sicherheit

QRandomGenerator ist reentrant, was bedeutet, dass mehrere Threads gleichzeitig auf diese Klasse zugreifen können, solange sie auf unterschiedliche Objekte zugreifen. Wenn mehrere Threads sich eine PRNG-Sequenz teilen müssen, ist eine externe Verriegelung durch einen Mutex erforderlich.

Ausnahmen bilden die von ` QRandomGenerator::global()` und ` QRandomGenerator::system()` zurückgegebenen Objekte: Diese Objekte sind threadsicher und können von jedem Thread ohne externe Sperre verwendet werden. Beachten Sie, dass sich die Threadsicherheit nicht auf das Kopieren dieser Objekte erstreckt: Sie sollten immer per Referenz verwendet werden.

Kompatibilität mit der Standard-C++-Bibliothek

QRandomGenerator orientiert sich an den Anforderungen an Zufallszahlengeneratoren in der C++-Standardbibliothek und kann in fast allen Kontexten verwendet werden, in denen auch die Generatoren der Standardbibliothek eingesetzt werden können. Ausnahmen von den Anforderungen sind die folgenden:

  • QRandomGenerator unterstützt keine Initialisierung mit einer anderen seed-sequenzähnlichen Klasse als std::seed_seq selbst;
  • QRandomGenerator ist nicht vergleichbar (aber kopierbar) oder streamfähig mit std::ostream oder von std::istream.

QRandomGenerator ist zudem kompatibel mit den Klassen für Gleichverteilungen std::uniform_int_distribution und std:uniform_real_distribution sowie mit der freien Funktion std::generate_canonical. Der folgende Code kann beispielsweise verwendet werden, um eine Gleitkommazahl im Bereich [1, 2,5) zu generieren:

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

Siehe auch QRandomGenerator64.

Dokumentation zu Mitgliedstypen

QRandomGenerator::result_type

Eine `typedef`-Definition für den Typ, den ` operator()` zurückgibt. Das heißt: `quint32`.

Siehe auch ` operator()`.

Dokumentation zu den Member-Funktionen

QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)

Initialisiert dieses QRandomGenerator-Objekt mit dem Wert „ seedValue “ als Startwert. Zwei Objekte, die mit demselben Startwert erstellt oder neu initialisiert wurden, erzeugen dieselbe Zahlenfolge.

Siehe auch „ seed()“ und „ securelySeeded()“.

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

Initialisiert dieses QRandomGenerator-Objekt mit den Werten aus dem Array „ seedBuffer “ als Startwert. Zwei Objekte, die mit demselben Startwert erstellt oder neu initialisiert wurden, erzeugen dieselbe Zahlenfolge.

Dies ist eine überladene Funktion.

Siehe auch ` seed()` und ` securelySeeded()`.

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

Initialisiert dieses QRandomGenerator-Objekt mit der Startsequenz „ sseq “ als Startwert. Zwei Objekte, die mit demselben Startwert erstellt oder neu initialisiert werden, erzeugen dieselbe Zahlenfolge.

Dies ist eine überladene Funktion.

Siehe auch seed() und securelySeeded().

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

Initialisiert dieses QRandomGenerator-Objekt mit den Werten aus dem Bereich von begin bis end als Startwert. Zwei Objekte, die mit demselben Startwert erstellt oder neu initialisiert wurden, erzeugen dieselbe Zahlenfolge.

Dieser Konstruktor entspricht:

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

Dies ist eine überladene Funktion.

Siehe auch seed() und securelySeeded().

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

Initialisiert dieses QRandomGenerator-Objekt mit den Werten „ len “, die im Array „ seedBuffer “ enthalten sind, als Startwert. Zwei Objekte, die mit demselben Startwert erstellt oder neu initialisiert wurden, erzeugen dieselbe Zahlenfolge.

Dieser Konstruktor entspricht:

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

Dies ist eine überladene Funktion.

Siehe auch „ seed()“ und „ securelySeeded()“.

QRandomGenerator::QRandomGenerator(const QRandomGenerator &other)

Erstellt eine Kopie des Generatorzustands im Objekt „ other “. Wenn „ other “ auf „ QRandomGenerator::system()“ gesetzt ist oder eine Kopie davon darstellt, liest dieses Objekt ebenfalls aus den Zufallsgeneratoren des Betriebssystems. In diesem Fall unterscheiden sich die von den beiden Objekten erzeugten Sequenzen.

In allen anderen Fällen beginnt das neue „QRandomGenerator“-Objekt an derselben Position in der deterministischen Sequenz wie das „ other “-Objekt. Beide Objekte erzeugen ab diesem Punkt dieselbe Sequenz.

Aus diesem Grund ist es nicht ratsam, eine Kopie von ` QRandomGenerator::global()` zu erstellen. Wenn Sie einen exklusiven deterministischen Generator benötigen, sollten Sie stattdessen die Verwendung von ` securelySeeded()` in Betracht ziehen, um ein neues Objekt zu erhalten, das in keiner Beziehung zu ` QRandomGenerator::global()` steht.

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

Löscht die Instanz von „ QRandomGenerator “.

double QRandomGenerator::bounded(double highest)

Erzeugt einen zufälligen Double-Wert im Bereich zwischen 0 (einschließlich) und highest (ausschließlich). Diese Funktion entspricht folgender Implementierung:

    return generateDouble() * highest;

Ist der Parameter ` highest ` negativ, ist das Ergebnis ebenfalls negativ; ist er unendlich oder NaN, ist das Ergebnis ebenfalls unendlich oder NaN (d. h., nicht zufällig).

Siehe auch ` generateDouble()` und ` bounded` (quint64).

int QRandomGenerator::bounded(int highest)

Erzeugt eine zufällige 32-Bit-Zahl im Bereich zwischen 0 (einschließlich) und highest (ausschließlich). highest muss positiv sein.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 32-Bit-Bereich von `int` zu erhalten. Verwenden Sie stattdessen ` generate()` und führen Sie eine Typumwandlung nach `int` durch.

Dies ist eine überladene Funktion.

Siehe auch generate(), generate64() und generateDouble().

qint64 QRandomGenerator::bounded(qint64 highest)

Erzeugt eine zufällige 64-Bit-Größe im Bereich zwischen 0 (einschließlich) und highest (ausschließlich). highest muss positiv sein.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 64-Bit-Bereich von qint64 zu erhalten. Verwenden Sie stattdessen generate64() und wandeln Sie den Wert in einen qint64 um oder nutzen Sie die vorzeichenlose Version dieser Funktion.

Hinweis: Diese Funktion ist als Schleife implementiert, deren Anzahl von Durchläufen vom erhaltenen Zufallswert abhängt. Langfristig sollte sie im Durchschnitt knapp unter 2 Mal durchlaufen, doch wenn der Zufallsgenerator fehlerhaft ist, kann die Ausführung dieser Funktion erheblich länger dauern.

Dies ist eine überladene Funktion.

Siehe auch ` generate()`, ` generate64()` und ` generateDouble()`.

quint32 QRandomGenerator::bounded(quint32 highest)

Erzeugt einen zufälligen 32-Bit-Wert im Bereich zwischen 0 (einschließlich) und highest (ausschließlich). Das gleiche Ergebnis lässt sich auch erzielen, indem man std::uniform_int_distribution mit den Parametern 0 und highest - 1. Diese Klasse kann auch verwendet werden, um Werte zu erhalten, die größer als 32 Bit sind; für 64 Bit kann ebenfalls die 64-Bit-Überladung von `bounded()` verwendet werden.

Um beispielsweise einen Wert zwischen 0 und 255 (einschließlich) zu erhalten, würde man schreiben:

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

Natürlich könnte man dasselbe Ergebnis auch erzielen, indem man das Ergebnis von ` generate()` auf die unteren 8 Bits maskiert. Beide Lösungen sind gleich effizient.

Beachte, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 32-Bit-Bereich von `quint32` zu erhalten. Verwende stattdessen ` generate()`.

Dies ist eine überladene Funktion.

Siehe auch „ generate()“, „ generate64()“ und „ generateDouble()“.

quint64 QRandomGenerator::bounded(quint64 highest)

Erzeugt eine zufällige 64-Bit-Größe im Bereich zwischen 0 (einschließlich) und highest (ausgeschlossen). Das gleiche Ergebnis lässt sich auch erzielen, indem man std::uniform_int_distribution<quint64> mit den Parametern 0 und highest - 1.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 64-Bit-Bereich von quint64 zu erhalten. Verwenden Sie stattdessen generate64().

Hinweis: Diese Funktion ist als Schleife implementiert, deren Anzahl von Durchläufen vom erhaltenen Zufallswert abhängt. Langfristig sollte sie im Durchschnitt knapp unter 2 Mal durchlaufen, doch wenn der Zufallsgenerator fehlerhaft ist, kann die Ausführung dieser Funktion erheblich länger dauern.

Dies ist eine überladene Funktion.

Siehe auch generate(), generate64() und generateDouble().

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

Erzeugt eine zufällige 32-Bit-Größe im Bereich zwischen lowest (einschließlich) und highest (ausschließlich), wobei beide Werte negativ sein können, highest jedoch größer als lowest sein muss.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 32-Bit-Bereich von `int` zu erhalten. Verwenden Sie stattdessen ` generate()` und führen Sie eine Typumwandlung nach `int` durch.

Dies ist eine überladene Funktion.

Siehe auch generate(), generate64() und 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)

Diese Funktion dient dazu, die Überladungsauflösung zu unterstützen, wenn die Typen der Parameter nicht exakt übereinstimmen. Dabei wird der kleinere Typ auf den Typ des größeren hochgestuft, und die richtige Überladung wird aufgerufen.

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

Erzeugt eine zufällige 64-Bit-Größe im Bereich zwischen lowest (einschließlich) und highest (ausgeschlossen), wobei beide Werte negativ sein können, highest jedoch größer als lowest sein muss.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 64-Bit-Bereich von qint64 zu erhalten. Verwenden Sie stattdessen generate64() und wandeln Sie den Wert in einen qint64-Typ um.

Hinweis: Diese Funktion ist als Schleife implementiert, deren Anzahl der Durchläufe vom ermittelten Zufallswert abhängt. Langfristig sollte sie im Durchschnitt knapp unter 2 Mal durchlaufen, doch wenn der Zufallsgenerator fehlerhaft ist, kann die Ausführung dieser Funktion erheblich länger dauern.

Dies ist eine überladene Funktion.

Siehe auch generate(), generate64() und generateDouble().

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

Erzeugt eine zufällige 32-Bit-Zahl im Bereich zwischen lowest (einschließlich) und highest (ausschließlich). Der Parameter „ highest “ muss größer als lowest sein.

Das gleiche Ergebnis lässt sich auch erzielen, indem man std::uniform_int_distribution mit den Parametern lowest und \a highest - 1. Diese Klasse kann auch verwendet werden, um Werte zu erhalten, die größer als 32 Bit sind.

Um beispielsweise einen Wert zwischen 1000 (einschließlich) und 2000 (ausschließlich) zu erhalten, würde man schreiben:

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

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 32-Bit-Bereich von `quint32` zu erhalten. Verwenden Sie stattdessen ` generate()`.

Dies ist eine überladene Funktion.

Siehe auch ` generate()`, ` generate64()` und ` generateDouble()`.

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

Erzeugt eine zufällige 64-Bit-Zahl im Bereich zwischen lowest (einschließlich) und highest (ausschließlich). Der Parameter „ highest “ muss größer als lowest sein.

Das gleiche Ergebnis lässt sich auch erzielen, indem man std::uniform_int_distribution<quint64> mit den Parametern lowest und \a highest - 1.

Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte im gesamten 64-Bit-Bereich von ` quint64` zu erhalten. Verwenden Sie stattdessen ` generate64()`.

Hinweis: Diese Funktion ist als Schleife implementiert, deren Anzahl von Durchläufen vom erzeugten Zufallswert abhängt. Langfristig sollte sie im Durchschnitt knapp unter 2 Mal durchlaufen, doch wenn der Zufallsgenerator fehlerhaft ist, kann die Ausführung dieser Funktion erheblich länger dauern.

Dies ist eine überladene Funktion.

Siehe auch generate(), generate64() und generateDouble().

void QRandomGenerator::discard(unsigned long long z)

Verwirft die nächsten z Einträge aus der Sequenz. Diese Methode entspricht dem z -maligen Aufruf von ` generate()` und dem Verwerfen des Ergebnisses, wie im folgenden Beispiel:

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

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

Erzeugt N 32-Bit- oder 64-Bit-Werte (je nach Typ UInt) und speichert diese im Array „ buffer “. Dies ist die effizienteste Methode, um mehrere Werte gleichzeitig zu erhalten, da dadurch die Anzahl der Aufrufe der Zufallszahlengenerator-Quelle reduziert wird.

Um beispielsweise zwei 32-Bit-Werte zu generieren, könnte man schreiben:

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

Es wäre auch möglich gewesen, einen einzigen Aufruf von ` generate64()` durchzuführen und anschließend die beiden Hälften des 64-Bit-Werts aufzuteilen.

Siehe auch ` generate()`.

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

Erzeugt count 32- oder 64-Bit-Werte (abhängig vom Typ UInt) und speichert diese im Puffer, auf den buffer verweist. Dies ist die effizienteste Methode, um mehrere Werte gleichzeitig zu erhalten, da dadurch die Anzahl der Aufrufe des Zufallszahlengenerators reduziert wird.

Um beispielsweise eine Liste mit 16 Einträgen mit Zufallswerten zu füllen, könnte man Folgendes schreiben:

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

Siehe auch generate().

quint64 QRandomGenerator::generate64()

Erzeugt eine 64-Bit-Zufallszahl und gibt diese zurück.

Siehe auch operator()() und generate().

quint32 QRandomGenerator::generate()

Erzeugt eine 32-Bit-Zufallszahl und gibt diese zurück.

Siehe auch operator()() und generate64().

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

Erzeugt 32-Bit-Größen und speichert diese im Bereich zwischen begin und end. Diese Funktion entspricht (und ist implementiert als):

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

Diese Funktion erfüllt die Anforderungen an die Funktion std::seed_seq::generate, die vorzeichenlose 32-Bit-Ganzzahlwerte erfordert.

Beachten Sie: Wenn sich der Bereich [begin, end) auf einen Speicherbereich bezieht, der mehr als 32 Bit pro Element speichern kann, werden die Elemente dennoch nur mit 32 Bit Daten initialisiert. Alle übrigen Bits sind Null. Um den Bereich mit 64-Bit-Größen zu füllen, kann man schreiben:

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

Bezieht sich der Bereich auf zusammenhängenden Speicher (z. B. ein Array oder die Daten aus einem ` QList`), kann auch die Funktion ` fillRange()` verwendet werden.

Siehe auch ` fillRange()`.

double QRandomGenerator::generateDouble()

Erzeugt einen Zufallswert vom Typ `qreal` im kanonischen Bereich [0, 1) (d. h. einschließlich 0 und ausschließlich 1).

Diese Funktion entspricht:

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

Das gleiche Ergebnis lässt sich auch erzielen, indem man std::uniform_real_distribution mit den Parametern 0 und 1.

Siehe auch generate(), generate64() und bounded().

[static] QRandomGenerator *QRandomGenerator::global()

Gibt einen Zeiger auf einen gemeinsam genutzten „ QRandomGenerator “ zurück, der mit „ securelySeeded()“ initialisiert wurde. Diese Funktion sollte verwendet werden, um Zufallsdaten zu erzeugen, ohne dass ein sicher initialisierter „ QRandomGenerator “ für einen bestimmten Zweck erstellt werden muss oder das relativ große „ QRandomGenerator “-Objekt gespeichert werden muss.

Beispielsweise erzeugt der folgende Code eine zufällige RGB-Farbe:

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

Zugriffe auf dieses Objekt sind threadsicher und es kann daher in jedem Thread ohne Sperren verwendet werden. Das Objekt kann auch kopiert werden, wobei die durch die Kopie erzeugte Sequenz mit der des gemeinsam genutzten Objekts übereinstimmt. Beachten Sie jedoch, dass andere Threads, die auf das globale Objekt zugreifen, möglicherweise in unvorhersehbaren Intervallen Stichproben erhalten.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch securelySeeded() und system().

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

Gibt den Maximalwert zurück, den „ QRandomGenerator “ jemals erzeugen kann. Das heißt: „ std::numeric_limits<result_type>::max() “.

Siehe auch min().

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

Gibt den Minimalwert zurück, den „ QRandomGenerator “ jemals generieren kann. Das heißt: 0.

Siehe auch max().

[static] QRandomGenerator QRandomGenerator::securelySeeded()

Gibt ein neues ` QRandomGenerator `-Objekt zurück, das mit ` QRandomGenerator::system()` sicher initialisiert wurde. Diese Funktion ermittelt die ideale Startwertgröße für den von ` QRandomGenerator ` verwendeten Algorithmus und ist daher die empfohlene Methode zum Erstellen eines neuen ` QRandomGenerator `-Objekts, das für einen längeren Zeitraum beibehalten werden soll.

Angesichts der Datenmenge, die für die sichere Initialisierung der deterministischen Engine erforderlich ist, ist diese Funktion relativ ressourcenintensiv und sollte nicht für kurzfristige Anwendungen von QRandomGenerator verwendet werden (die Verwendung zur Erzeugung von weniger als 2600 Byte Zufallsdaten stellt praktisch eine Verschwendung von Ressourcen dar). Wenn für die Anwendung nicht so viele Daten benötigt werden, sollten Sie stattdessen die Verwendung von ` QRandomGenerator::global()` in Betracht ziehen und kein ` QRandomGenerator `-Objekt speichern.

Siehe auch global() und system().

void QRandomGenerator::seed(quint32 seed = 1)

Setzt den Startwert dieses Objekts auf den Wert „ seed “ zurück.

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

Setzt dieses Objekt unter Verwendung der Startwertfolge „ seed “ als Startwert zurück.

Dies ist eine überladene Funktion.

[static] QRandomGenerator *QRandomGenerator::system()

Gibt einen Zeiger auf einen gemeinsam genutzten Zufallsgenerator ( QRandomGenerator ) zurück, der stets die vom Betriebssystem bereitgestellten Funktionen zur Erzeugung von Zufallszahlen nutzt. Die Systemfunktionen gelten zumindest auf den folgenden Betriebssystemen als kryptografisch sicher: Apple-Betriebssysteme (Darwin), BSDs, Linux, Windows. Dies kann auch auf anderen Betriebssystemen der Fall sein.

Möglicherweise werden sie zudem von einem echten Hardware-Zufallszahlengenerator unterstützt. Aus diesem Grund sollte das von dieser Funktion zurückgegebene ` QRandomGenerator ` nicht zur Generierung großer Datenmengen verwendet werden. Verwenden Sie es stattdessen, um ` QRandomGenerator ` oder eine Zufallszahlengenerator-Engine aus dem <random>-Header zu initialisieren.

Das von dieser Funktion zurückgegebene Objekt ist threadsicher und kann in jedem Thread ohne Sperren verwendet werden. Es kann auch kopiert werden, und die resultierenden „ QRandomGenerator “ greifen ebenfalls auf die Funktionen des Betriebssystems zu, erzeugen jedoch nicht dieselbe Sequenz.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch securelySeeded() und global().

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

Erzeugt eine 32-Bit-Zufallszahl und gibt diese zurück.

Siehe auch generate() und generate64().

Verwandte Nicht-Mitglieder

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

Gibt „ true “ zurück, wenn sich die beiden Engines „ rng1 “ und „ rng2 “ in unterschiedlichen Zuständen befinden oder wenn eine von ihnen auf Betriebssystemfunktionen zugreift und die andere nicht; andernfalls „ false “.

© 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.