Auf dieser Seite

QFlags Class

template <typename Enum> class QFlags

Die Klasse „QFlags“ bietet eine typsichere Möglichkeit, ODER-Kombinationen von Enum-Werten zu speichern. Mehr...

Header: #include <QFlags>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt von: QtPrivate::QFlagsStorageHelper

Öffentliche Typen

Öffentliche Funktionen

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> flags)
(since 6.9) QFlags(std::in_place_t, QFlags<T>::Int flags)
QFlags(const QFlags<T> &other)
QFlags<T> &setFlag(Enum flag, bool on = true)
(since 6.2) bool testAnyFlag(Enum flag) const
(since 6.2) bool testAnyFlags(QFlags<T> flags) const
bool testFlag(Enum flag) const
(since 6.2) bool testFlags(QFlags<T> flags) const
(since 6.2) QFlags<T>::Int toInt() const
operator QFlags<T>::Int() const
bool operator!() const
QFlags<T> operator&(int mask) const
QFlags<T> operator&(Enum mask) const
(since 6.2) QFlags<T> operator&(QFlags<T> mask) const
QFlags<T> operator&(uint mask) const
QFlags<T> &operator&=(int mask)
QFlags<T> &operator&=(Enum mask)
(since 6.2) QFlags<T> &operator&=(QFlags<T> mask)
QFlags<T> &operator&=(uint mask)
int &operator=(const QFlags<T> &other)
QFlags<T> operator^(QFlags<T> other) const
QFlags<T> operator^(Enum other) const
QFlags<T> &operator^=(QFlags<T> other)
QFlags<T> &operator^=(Enum other)
QFlags<T> operator|(QFlags<T> other) const
QFlags<T> operator|(Enum other) const
QFlags<T> &operator|=(QFlags<T> other)
QFlags<T> &operator|=(Enum other)
QFlags<T> operator~() const

Statische öffentliche Mitglieder

(since 6.2) QFlags<T> fromInt(QFlags<T>::Int i)
(since 6.2) size_t qHash(QFlags<Enum> key, size_t seed = 0)
(since 6.2) bool operator!=(Enum lhs, QFlags<T> rhs)
(since 6.2) bool operator!=(QFlags<T> lhs, Enum rhs)
(since 6.2) bool operator!=(QFlags<T> lhs, QFlags<T> rhs)
(since 6.2) bool operator==(Enum lhs, QFlags<T> rhs)
(since 6.2) bool operator==(QFlags<T> lhs, Enum rhs)
(since 6.2) bool operator==(QFlags<T> lhs, QFlags<T> rhs)

Makros

Ausführliche Beschreibung

QFlags<ENUM> ist eine Template-Klasse, wobei Enum ein Aufzählungstyp ist. QFlags wird in Qt durchgehend zum Speichern von Kombinationen von Aufzählungswerten verwendet.

Der traditionelle C++-Ansatz zum Speichern von ODER-Kombinationen von Enum-Werten besteht darin, eine Variable vom Typ „ int “ oder „ uint “ zu verwenden. Der Nachteil dieses Ansatzes ist, dass keinerlei Typüberprüfung stattfindet; jeder Enum-Wert kann mit jedem anderen Enum-Wert verknüpft und an eine Funktion übergeben werden, die einen „ int “ oder „ uint “ akzeptiert.

Seit Qt 6.9 unterstützt QFlags 64-Bit-Enumerationen. Es wird empfohlen, bei Werten über 32 Bit explizite (feste) zugrunde liegende Typen zu verwenden, um sicherzustellen, dass sich weder die Größe der Enumeration noch die des QFlags-Typs ändert, wenn ein Enumerator entfernt wird. Einige Compiler erweitern den Typ ` enum ` zudem nur dann auf mehr als 32 Bit, wenn explizite zugrunde liegende Typen angegeben werden.

Qt::AlignmentFlagQt nutzt QFlags, um Typsicherheit zu gewährleisten. So ist beispielsweise der Typ „ Qt::Alignment “ lediglich ein `typedef` für `QFlags<XML-ph-0001@deepl.internal>`. ` QLabel::setAlignment()` nimmt einen Parameter vom Typ ` Qt::Alignment ` entgegen, was bedeutet, dass jede Kombination aus ` Qt::AlignmentFlag `-Werten oder ` { }` zulässig ist:

label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
label->setAlignment({ });

Wenn Sie versuchen, einen Wert aus einer anderen Aufzählung oder einfach nur eine ganze Zahl ungleich 0 zu übergeben, meldet der Compiler einen Fehler. Wenn Sie ganzzahlige Werte typunabhängig in Flags umwandeln müssen, können Sie den expliziten QFlags-Konstruktor als Umwandlungsoperator verwenden.

Wenn Sie QFlags für Ihre eigenen Enum-Typen verwenden möchten, nutzen Sie die Funktionen ` Q_DECLARE_FLAGS()` und ` Q_DECLARE_OPERATORS_FOR_FLAGS()`. In diesem Fall muss ` Q_DECLARE_FLAGS()` im selben Gültigkeitsbereich (Klasse oder Namespace) wie die entsprechende Enum-Typdefinition stehen.

Beispiel:

class MyClass_1
{
public:
    enum Option {
        NoOptions = 0x0,
        ShowTabs = 0x1,
        ShowAll = 0x2,
        SqueezeBlank = 0x4
    };
    Q_DECLARE_FLAGS(Options, Option)
    //...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_1::Options)

Sie können dann den Typ ` MyClass::Options ` verwenden, um Kombinationen von ` MyClass::Option `-Werten zu speichern.

Flags und das Metaobjektsystem

Das Makro „ Q_DECLARE_FLAGS()“ macht die Flags nicht für das Metaobjektsystem zugänglich, sodass sie weder von Qt Script verwendet noch im „ Qt Widgets Designer“ bearbeitet werden können. Um die Flags für diese Zwecke verfügbar zu machen, muss das Makro „ Q_FLAG()“ verwendet werden:

class MyClass_2
{
    Q_OBJECT
public:
    enum Option {
        NoOptions = 0x0,
        ShowTabs = 0x1,
        ShowAll = 0x2,
        SqueezeBlank = 0x4
    };
    Q_DECLARE_FLAGS(Options, Option)
    Q_FLAG(Options)
    //...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_2::Options)

Namenskonvention

Eine sinnvolle Namenskonvention für Enum-Typen und zugehörige QFlags-Typen besteht darin, dem Enum-Typ einen Namen im Singular (z. B. „ Option “) und dem QFlags-Typ einen Namen im Plural (z. B. „ Options “) zu geben. Wenn für den QFlags-Typ ein Name im Singular gewünscht ist (z. B. Alignment), können Sie „ Flag “ als Suffix für den Enum-Typ verwenden (z. B. AlignmentFlag).

Dokumentation zu Mitgliedstypen

[alias] QFlags::Int

Typedef für den Integer-Typ, der sowohl zur Speicherung als auch für implizite Konvertierungen verwendet wird. Entweder „ qintXX “ oder „ quintXX “, je nachdem, ob der zugrunde liegende Typ der Enumeration vorzeichenbehaftet oder vorzeichenlos ist, sowie – seit Qt 6.9 – von der Größe der Enumeration. In der Regel handelt es sich dabei um „ qint32 “ (int) oder „ quint32 “ (unsigned).

QFlags::enum_type

Typedef für den Enum-Vorlagentyp.

Dokumentation zu den Member-Funktionen

[constexpr noexcept default] QFlags::QFlags()

Erstellt ein QFlags-Objekt, bei dem keine Flags gesetzt sind.

[constexpr noexcept] QFlags::QFlags(Enum flags)

Erstellt ein QFlags-Objekt, in dem die „ flags “ gespeichert sind.

[constexpr noexcept] QFlags::QFlags(QFlag flag) requires (sizeof(Enum) == sizeof(int))

Erstellt ein QFlags-Objekt, das mit der Ganzzahl flag initialisiert ist.

Der Typ ` QFlag ` ist ein Hilfstyp. Indem wir ihn hier anstelle von ` int` verwenden, stellen wir effektiv sicher, dass beliebige Enum-Werte nicht in ein `QFlags` umgewandelt werden können, während untypisierte Enum-Werte (d. h. Werte vom Typ ` int `) dies sehr wohl können.

Dieser Konstruktor ist nur für 32-Bit- Enum -Typen vorhanden. Um alle Enum-Größen zu unterstützen, sollten Sie den Konstruktor mit „ std::in_place_t “ in Betracht ziehen.

[constexpr noexcept] QFlags::QFlags(std::initializer_list<Enum> flags)

Erstellt ein QFlags-Objekt, das mit allen flags initialisiert wird, die mithilfe des bitweisen ODER-Operators kombiniert wurden.

Siehe auch „ operator|=()“ und „ operator|()“.

[constexpr noexcept, since 6.9] QFlags::QFlags(std::in_place_t, QFlags<T>::Int flags)

Erstellt ein QFlags-Objekt, das mit dem Integer- flags initialisiert ist.

Diese Funktion wurde in Qt 6.9 eingeführt.

[implicit] QFlags::QFlags(const QFlags<T> &other)

Erstellt eine Kopie von „ other “.

[static constexpr noexcept, since 6.2] QFlags<T> QFlags::fromInt(QFlags<T>::Int i)

Erstellt ein „ QFlags “-Objekt, das den ganzzahligen Wert „ i “ darstellt.

Diese Funktion wurde in Qt 6.2 eingeführt.

[constexpr noexcept] QFlags<T> &QFlags::setFlag(Enum flag, bool on = true)

Setzt das Flag „ flag “, wenn „ on “ den Wert „ true “ hat, oder hebt es auf, wenn „ on “ den Wert „ false “ hat. Gibt eine Referenz auf dieses Objekt zurück.

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlag(Enum flag) const

Gibt „ true “ zurück, wenn ein in „ flag “ gesetztes Flag auch in diesem Flag-Objekt gesetzt ist, andernfalls „ false “. Wenn in „ flag “ kein Flag gesetzt ist, ist der Rückgabewert immer „ false “.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch „ testFlag()“.

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlags(QFlags<T> flags) const

Gibt „ true “ zurück, wenn ein in „ flags “ gesetztes Flag auch in diesem Flag-Objekt gesetzt ist, andernfalls „ false “. Wenn in „ flags “ keine Flags gesetzt sind, lautet der Rückgabewert immer „ false “.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch „ testFlags()“.

[constexpr noexcept] bool QFlags::testFlag(Enum flag) const

Gibt „ true “ zurück, wenn das Flag „ flag “ gesetzt ist, andernfalls „ false “.

Hinweis: Wenn „ flag “ mehrere auf 1 gesetzte Bits enthält (beispielsweise, wenn es sich um einen Enumerator handelt, der dem bitweisen ODER anderer Enumeratoren entspricht), gibt diese Funktion genau dann „ true “ zurück, wenn alle Bits in diesem Flags-Objekt gesetzt sind. Wenn hingegen flag keine auf 1 gesetzten Bits enthält (d. h., sein Wert als Ganzzahl ist 0), gibt diese Funktion genau dann „ true “ zurück, wenn auch dieses Flags-Objekt keine auf 1 gesetzten Bits enthält.

Siehe auch „ testAnyFlag()“.

[constexpr noexcept, since 6.2] bool QFlags::testFlags(QFlags<T> flags) const

Gibt ` true ` zurück, wenn dieses Flags-Objekt mit dem angegebenen ` flags` übereinstimmt.

Wenn in „ flags “ Flags gesetzt sind, stimmt dieses Flags-Objekt genau überein, wenn alle in „ flags “ gesetzten Flags auch in diesem Flags-Objekt gesetzt sind. Andernfalls, wenn in „ flags “ keine Flags gesetzt sind, stimmt dieses Flags-Objekt nur überein, wenn es ebenfalls keine Flags enthält.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch „ testAnyFlags()“.

[constexpr noexcept, since 6.2] QFlags<T>::Int QFlags::toInt() const

Gibt den im Objekt „ QFlags “ gespeicherten Wert als Ganzzahl zurück. Beachten Sie, dass die zurückgegebene Ganzzahl vorzeichenbehaftet oder vorzeichenlos sein kann, je nachdem, ob der zugrunde liegende Typ der Enumeration vorzeichenbehaftet oder vorzeichenlos ist.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch „ Int “.

[constexpr noexcept] QFlags::operator QFlags<T>::Int() const

Gibt den im Objekt „ QFlags “ gespeicherten Wert als Ganzzahl zurück.

Siehe auch „ Int “.

[constexpr noexcept] bool QFlags::operator!() const

Gibt „ true “ zurück, wenn kein Flag gesetzt ist (d. h., wenn der vom Objekt „ QFlags “ gespeicherte Wert 0 ist); andernfalls wird „ false “ zurückgegeben.

[constexpr noexcept] QFlags<T> QFlags::operator&(int mask) const

Gibt ein ` QFlags `-Objekt zurück, das das Ergebnis der bitweisen UND-Operation zwischen diesem Objekt und ` mask` enthält.

Dieser Operator ist deaktiviert, wenn das Makro ` QT_TYPESAFE_FLAGS ` definiert ist. Beachten Sie, dass er auch für 64-Bit-` QFlags ` nicht auf 64 Bit erweitert ist: Verwenden Sie für 64-Bit-Unterstützung die typsichere Überladung.

Siehe auch „ operator&=()“, „ operator|()“, „ operator^()“ und „ operator~()“.

[constexpr noexcept] QFlags<T> QFlags::operator&(Enum mask) const

Dies ist eine überladene Funktion.

[constexpr noexcept, since 6.2] QFlags<T> QFlags::operator&(QFlags<T> mask) const

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.2 eingeführt.

[constexpr noexcept] QFlags<T> QFlags::operator&(uint mask) const

Dieser Operator ist deaktiviert, wenn das Makro „ QT_TYPESAFE_FLAGS “ definiert ist. Beachten Sie, dass er auch bei 64-Bit- QFlags nicht auf 64-Bit erweitert wird: Verwenden Sie für die 64-Bit-Unterstützung die typsichere Überladung.

Dies ist eine überladene Funktion.

[constexpr noexcept] QFlags<T> &QFlags::operator&=(int mask)

Führt eine bitweise UND-Operation mit ` mask ` durch und speichert das Ergebnis in diesem ` QFlags `-Objekt. Gibt eine Referenz auf dieses Objekt zurück.

Dieser Operator ist deaktiviert, wenn das Makro ` QT_TYPESAFE_FLAGS ` definiert ist. Beachten Sie, dass er auch für 64-Bit-` QFlags ` nicht auf 64 Bit erweitert ist: Verwenden Sie für 64-Bit-Unterstützung die typsichere Überladung.

Siehe auch „ operator&()“, „ operator|=()“ und „ operator^=()“.

[constexpr noexcept] QFlags<T> &QFlags::operator&=(Enum mask)

Dies ist eine überladene Funktion.

[constexpr noexcept, since 6.2] QFlags<T> &QFlags::operator&=(QFlags<T> mask)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.2 eingeführt.

[constexpr noexcept] QFlags<T> &QFlags::operator&=(uint mask)

Dieser Operator ist deaktiviert, wenn das Makro „ QT_TYPESAFE_FLAGS “ definiert ist. Beachten Sie, dass er auch bei 64-Bit- QFlags nicht auf 64-Bit erweitert wird: Verwenden Sie für die 64-Bit-Unterstützung die typsichere Überladung.

Dies ist eine überladene Funktion.

[implicit] int &QFlags::operator=(const QFlags<T> &other)

Weist diesem Objekt „ other “ zu und gibt eine Referenz auf dieses Objekt zurück.

[constexpr noexcept] QFlags<T> QFlags::operator^(QFlags<T> other) const

Gibt ein „ QFlags “-Objekt zurück, das das Ergebnis der bitweisen XOR-Operation zwischen diesem Objekt und „ other “ enthält.

Siehe auch „ operator^=()“, „ operator&()“, „ operator|()“ und „ operator~()“.

[constexpr noexcept] QFlags<T> QFlags::operator^(Enum other) const

Dies ist eine überladene Funktion.

[constexpr noexcept] QFlags<T> &QFlags::operator^=(QFlags<T> other)

Führt eine bitweise XOR-Operation mit other durch und speichert das Ergebnis in diesem QFlags -Objekt. Gibt eine Referenz auf dieses Objekt zurück.

Siehe auch „ operator^()“, „ operator&=()“ und „ operator|=()“.

[constexpr noexcept] QFlags<T> &QFlags::operator^=(Enum other)

Dies ist eine überladene Funktion.

[constexpr noexcept] QFlags<T> QFlags::operator|(QFlags<T> other) const

Gibt ein „ QFlags “-Objekt zurück, das das Ergebnis der bitweisen ODER-Operation zwischen diesem Objekt und „ other “ enthält.

Siehe auch operator|=(), operator^(), operator&() und operator~().

[constexpr noexcept] QFlags<T> QFlags::operator|(Enum other) const

Dies ist eine überladene Funktion.

[constexpr noexcept] QFlags<T> &QFlags::operator|=(QFlags<T> other)

Führt eine bitweise ODER-Operation mit other durch und speichert das Ergebnis in diesem QFlags -Objekt. Gibt eine Referenz auf dieses Objekt zurück.

Siehe auch „ operator|()“, „ operator&=()“ und „ operator^=()“.

[constexpr noexcept] QFlags<T> &QFlags::operator|=(Enum other)

Dies ist eine überladene Funktion.

[constexpr noexcept] QFlags<T> QFlags::operator~() const

Gibt ein „ QFlags “-Objekt zurück, das die bitweise Negation dieses Objekts enthält.

Siehe auch „ operator&()“, „ operator|()“ und „ operator^()“.

Verwandte Nicht-Mitglieder

[constexpr noexcept, since 6.2] template <typename Enum> size_t qHash(QFlags<Enum> key, size_t seed = 0)

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.2 eingeführt.

[constexpr noexcept, since 6.2] bool operator!=(Enum lhs, QFlags<T> rhs)

[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, Enum rhs)

[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, QFlags<T> rhs)

Vergleicht lhs und rhs auf Ungleichheit; die beiden Argumente gelten als unterschiedlich, wenn sie nicht genau denselben Wert (Bitmaske) darstellen.

Diese Funktionen wurden in Qt 6.2 eingeführt.

[constexpr noexcept, since 6.2] bool operator==(Enum lhs, QFlags<T> rhs)

[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, Enum rhs)

[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, QFlags<T> rhs)

Vergleicht „ lhs “ und „ rhs “ auf Gleichheit; die beiden Argumente gelten als gleich, wenn sie genau denselben Wert (Bitmaske) darstellen.

Diese Funktionen wurden in Qt 6.2 eingeführt.

Makro-Dokumentation

Q_DECLARE_FLAGS(Flags, Enum)

Das Makro `Q_DECLARE_FLAGS()` wird zu

typedef QFlags<Enum> Flags;

Enum ist der Name eines vorhandenen Enum-Typs, während „ Flags “ der Name des Typdefinitionsbezeichners „ QFlags<Enum>“ ist.

Einzelheiten finden Sie in der Dokumentation zu „ QFlags “.

Siehe auch Q_DECLARE_OPERATORS_FOR_FLAGS().

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Das Makro `Q_DECLARE_OPERATORS_FOR_FLAGS()` deklariert globale bitweise Operatorfunktionen ` operator|()`, ` operator&()`, ` operator^()`, ` operator~() ` sowie deren Zuweisungsformen: `&=`, `|=` und `^=` für ` Flags`, das vom Typ ` QFlags<T>` ist.

Einzelheiten finden Sie in der Dokumentation zu „ QFlags “.

Siehe auch „ Q_DECLARE_FLAGS()“.

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