QFlags Class
template <typename Enum> class QFlagsDie 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) |
Verwandte Nicht-Members
(since 6.2) size_t | qHash(QFlags<Enum> key, size_t seed = 0) |
Makros
Q_DECLARE_FLAGS(Flags, Enum) | |
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
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.
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.