QFlags Class

template <typename Enum> class QFlags

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

Kopfzeile: #include <QFlags>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Öffentliche Typen

Öffentliche Funktionen

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> 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
QFlags<T>::Int 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)

Makros

Detaillierte Beschreibung

Die Klasse QFlags<Enum> ist eine Template-Klasse, wobei Enum ein Enum-Typ ist. QFlags wird in Qt zum Speichern von Kombinationen von Enum-Werten verwendet.

Der traditionelle C++-Ansatz zum Speichern von ODER-Kombinationen von Enum-Werten ist die Verwendung einer int oder uint Variablen. Der Nachteil dieses Ansatzes ist, dass es keinerlei Typüberprüfung gibt; jeder Enum-Wert kann mit jedem anderen Enum-Wert ODER-verknüpft werden und an eine Funktion weitergegeben werden, die eine int oder uint benötigt.

Qt verwendet QFlags, um Typsicherheit zu gewährleisten. Zum Beispiel ist der Typ Qt::Alignment einfach ein Typedef für QFlags<Qt::AlignmentFlag>. QLabel::setAlignment() nimmt einen Qt::Alignment Parameter, was bedeutet, dass jede Kombination von Qt::AlignmentFlag Werten oder { } legal ist:

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

Wenn Sie versuchen, einen Wert aus einem anderen Enum oder eine einfache Ganzzahl außer 0 zu übergeben, wird der Compiler einen Fehler melden. Wenn Sie Integer-Werte ohne Typisierung 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, benutzen Sie Q_DECLARE_FLAGS() und Q_DECLARE_OPERATORS_FOR_FLAGS().

Beispiel:

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

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options)

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

Flaggen und das Meta-Objektsystem

Das Makro Q_DECLARE_FLAGS() stellt die Flags dem Meta-Objektsystem nicht zur Verfügung, so dass sie nicht von Qt Script verwendet oder im Qt Widgets Designer bearbeitet werden können. Um die Flags für diese Zwecke verfügbar zu machen, muss das Q_FLAG() Makro verwendet werden:

Q_FLAG(Options)

Benennungskonvention

Eine sinnvolle Namenskonvention für Enum-Typen und zugehörige QFlags-Typen ist es, dem Enum-Typ einen Singularnamen zu geben (z.B. Option) und dem QFlags-Typ einen Pluralnamen (z.B. Options). Wenn ein singulärer Name für den QFlags-Typ (z. B. Alignment) gewünscht wird, können Sie Flag als Suffix für den Enum-Typ (z. B. AlignmentFlag) verwenden.

Siehe auch QFlag.

Dokumentation der Membertypen

QFlags::Int

Typedef für den Integer-Typ, der sowohl für die Speicherung als auch für die implizite Konvertierung verwendet wird. Entweder int oder unsigned int, je nachdem, ob der zugrunde liegende Typ der Aufzählung vorzeichenbehaftet oder vorzeichenlos ist.

QFlags::enum_type

Typedef für den Enum-Vorlagentyp.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept] QFlags::QFlags()

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

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

Konstruiert ein QFlags-Objekt, das die flags speichert.

[constexpr noexcept] QFlags::QFlags(QFlag flag)

Konstruiert ein QFlags-Objekt, das mit der Ganzzahl flag initialisiert wird.

Der Typ QFlag ist ein Hilfstyp. Indem wir ihn hier anstelle von int verwenden, stellen wir sicher, dass beliebige Enum-Werte nicht in ein QFlags-Objekt gecastet werden können, wohingegen nicht typisierte Enum-Werte (d.h. int -Werte) dies können.

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

Konstruiert ein QFlags-Objekt, das mit allen flags initialisiert und mit dem bitweisen OR-Operator kombiniert wird.

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

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

Konstruiert eine Kopie von other.

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

Konstruiert ein QFlags Objekt, das den Integer-Wert i repräsentiert.

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 true ist, oder löscht es, wenn on false ist. Gibt einen Verweis 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 Flags-Objekt gesetzt ist, ansonsten false. Wenn flag keine Flags gesetzt hat, 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 Flags-Objekt gesetzt ist, ansonsten false. Wenn flags keine Flags gesetzt hat, ist 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, ansonsten false.

Hinweis: Wenn flag mehrere auf 1 gesetzte Bits enthält (z. B. wenn es sich um einen Aufzähler handelt, der dem bitweisen ODER anderer Aufzähler entspricht), dann gibt diese Funktion true nur dann zurück, wenn alle Bits in diesem Flaggenobjekt gesetzt sind. Wenn flag dagegen keine Bits enthält, die auf 1 gesetzt sind (d.h. sein Wert als Ganzzahl ist 0), dann gibt diese Funktion true nur dann zurück, wenn auch in diesem Flags-Objekt keine Bits auf 1 gesetzt sind.

Siehe auch testAnyFlag().

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

Gibt true zurück, wenn dieses Flaggenobjekt mit dem angegebenen flags übereinstimmt.

Wenn flags irgendwelche Flags gesetzt hat, stimmt dieses Flags-Objekt genau dann überein, wenn alle in flags gesetzten Flags auch in diesem Flags-Objekt gesetzt sind. Andernfalls, wenn flags keine Flags gesetzt hat, passt dieses Flags-Objekt nur, wenn es auch keine Flags gesetzt hat.

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 zugrundeliegende Typ der Enum vorzeichenbehaftet oder vorzeichenlos ist.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch Int.

[constexpr noexcept] QFlags<T>::Int 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 im Objekt QFlags gespeicherte Wert 0 ist); andernfalls wird false zurückgegeben.

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

Gibt ein Objekt QFlags zurück, das das Ergebnis der bitweisen UND-Verknüpfung dieses Objekts mit mask enthält.

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

Dies ist eine überladene Funktion.

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

Führt eine bitweise UND-Verknüpfung mit mask durch und speichert das Ergebnis in diesem QFlags Objekt. Gibt einen Verweis auf dieses Objekt zurück.

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)

Dies ist eine überladene Funktion.

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

Weist other diesem Objekt 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 für dieses 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 einen Verweis 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 Objekt QFlags zurück, das das Ergebnis der bitweisen ODER-Verknüpfung dieses Objekts mit 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 einen Verweis 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 Hashwert für key zurück, wobei seed als Seed für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.2 eingeführt.

Makro-Dokumentation

Q_DECLARE_FLAGS(Flags, Enum)

Das Makro Q_DECLARE_FLAGS() expandiert zu

typedef QFlags<Enum> Flags;

Enum ist der Name eines existierenden Enum-Typs, während Flags der Name des QFlags<Enum> typedef ist.

Siehe die QFlags Dokumentation für Details.

Siehe auch Q_DECLARE_OPERATORS_FOR_FLAGS().

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Das Makro Q_DECLARE_OPERATORS_FOR_FLAGS() deklariert globale operator|() Funktionen für Flags, das vom Typ QFlags<T> ist.

Siehe die QFlags Dokumentation für Details.

Siehe auch Q_DECLARE_FLAGS().

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