Sur cette page

QFlags Class

template <typename Enum> class QFlags

La classe QFlags offre un moyen sûr, du point de vue des types, de stocker des combinaisons « OU » de valeurs d'énumération. En savoir plus...

En-tête : #include <QFlags>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QtPrivate::QFlagsStorageHelper

Types publics

Fonctions publiques

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

Membres publics statiques

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

Macros

Description détaillée

QFlags<ENUM> est une classe de modèle où Enum est un type d'énumération. QFlags est utilisé dans l'ensemble de Qt pour stocker des combinaisons de valeurs d'énumération.

L'approche traditionnelle en C++ pour stocker des combinaisons « OU » de valeurs d'énumération consiste à utiliser une variable de type « int » ou « uint ». L'inconvénient de cette approche est qu'il n'y a absolument aucun contrôle de type ; n'importe quelle valeur d'énumération peut être combinée par un « OU » avec n'importe quelle autre valeur d'énumération et transmise à une fonction qui prend un « int » ou un « uint ».

Depuis Qt 6.9, QFlags prend en charge les énumérations 64 bits. Il est recommandé d’utiliser des types sous-jacents explicites (fixes) lorsque l’on dépasse 32 bits, afin de garantir que ni l’énumération ni le type QFlags ne changent de taille si un élément de l’énumération est supprimé. Certains compilateurs n’augmenteront d’ailleurs la taille du type ` enum ` au-delà de 32 bits qu’avec des types sous-jacents explicites.

Qt::AlignmentFlagQt utilise QFlags pour garantir la sécurité des types. Par exemple, le type ` Qt::Alignment ` est simplement un `typedef` pour `QFlags<XML-ph-0001@deepl.internal>`. La fonction ` QLabel::setAlignment()` prend un paramètre de type ` Qt::Alignment `, ce qui signifie que toute combinaison de valeurs de type ` Qt::AlignmentFlag `, ou ` { }`, est valide :

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

Si vous essayez de passer une valeur provenant d’une autre énumération ou simplement un entier différent de 0, le compilateur signalera une erreur. Si vous avez besoin de convertir des valeurs entières en drapeaux sans spécification de type, vous pouvez utiliser le constructeur explicite de QFlags comme opérateur de conversion.

Si vous souhaitez utiliser QFlags pour vos propres types d’énumération, utilisez les méthodes Q_DECLARE_FLAGS() et Q_DECLARE_OPERATORS_FOR_FLAGS(). Dans ce cas, Q_DECLARE_FLAGS() doit apparaître dans la même portée (classe ou espace de noms) que l’énumération correspondante.

Exemple :

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)

Vous pouvez alors utiliser le type ` MyClass::Options ` pour stocker des combinaisons de valeurs ` MyClass::Option `.

Les indicateurs et le système de méta-objets

La macro ` Q_DECLARE_FLAGS()` n’expose pas les indicateurs au système de méta-objets ; ils ne peuvent donc pas être utilisés par Qt Script ni modifiés dans Qt Widgets Designer. Pour rendre les indicateurs disponibles à ces fins, il faut utiliser la macro ` Q_FLAG()` :

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)

Convention de nommage

Une convention de nommage judicieuse pour les types énumérés et les types QFlags associés consiste à donner un nom au singulier au type énuméré (par exemple, Option) et un nom au pluriel au type QFlags (par exemple, Options). Lorsqu’un nom au singulier est souhaité pour le type QFlags (par exemple, Alignment), vous pouvez utiliser « Flag » comme suffixe pour le type énuméré (par exemple, AlignmentFlag).

Documentation sur les types membres

[alias] QFlags::Int

Définition de type (typedef) pour le type entier utilisé à la fois pour le stockage et pour la conversion implicite. Il s'agit soit de ` qintXX `, soit de ` quintXX`, selon que le type sous-jacent de l'énumération est signé ou non signé et, depuis Qt 6.9, en fonction de la taille de l'énumération. En général, il s'agira de ` qint32 ` (int) ou de ` quint32 ` (unsigned).

QFlags::enum_type

Définition de type pour le type de modèle énuméré.

Documentation sur les fonctions membres

[constexpr noexcept default] QFlags::QFlags()

Crée un objet QFlags sans aucun indicateur défini.

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

Crée un objet QFlags contenant l'flags.

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

Crée un objet QFlags initialisé avec l'entier flag.

Le type ` QFlag ` est un type auxiliaire. En l'utilisant ici à la place de ` int`, nous garantissons ainsi que des valeurs d'énumération arbitraires ne peuvent pas être converties en `QFlags`, contrairement aux valeurs d'énumération non typées (c'est-à-dire les valeurs de type ` int `).

Ce constructeur n’existe que pour les types ` Enum ` 32 bits. Pour prendre en charge toutes les tailles d’énumération, envisagez d’utiliser le constructeur avec ` std::in_place_t`.

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

Crée un objet QFlags initialisé avec l'ensemble des flags combinées à l'aide de l'opérateur OR binaire.

Voir également ` operator|=()` et ` operator|()`.

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

Crée un objet QFlags initialisé avec l'flags, de type entier.

Cette fonction a été introduite dans Qt 6.9.

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

Crée une copie de other.

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

Crée un objet ` QFlags ` représentant la valeur entière ` i`.

Cette fonction a été introduite dans Qt 6.2.

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

Active l'indicateur « flag » si « on » est « true » ou le désactive si « on » est « false ». Renvoie une référence à cet objet.

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

Renvoie « true » si un indicateur défini dans « flag » est également défini dans cet objet « flags », sinon « false ». Si « flag » ne contient aucun indicateur défini, la valeur renvoyée sera toujours « false ».

Cette fonction a été introduite dans Qt 6.2.

Voir également testFlag().

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

Renvoie « true » si un indicateur défini dans « flags » est également défini dans cet objet « flags », sinon « false ». Si « flags » ne contient aucun indicateur défini, la valeur renvoyée sera toujours « false ».

Cette fonction a été introduite dans Qt 6.2.

Voir également testFlags().

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

Renvoie « true » si l'indicateur « flag » est activé, sinon « false ».

Remarque : si ` flag ` contient plusieurs bits à 1 (par exemple, s’il s’agit d’un énumérateur égal à la somme logique (OU) d’autres énumérateurs), alors cette fonction renverra ` true ` si et seulement si tous les bits de cet objet de drapeaux sont à 1. En revanche, si flag ne contient aucun bit à 1 (c’est-à-dire que sa valeur en tant qu’entier est 0), alors cette fonction renverra true si et seulement si cet objet flags ne contient lui non plus aucun bit à 1.

Voir également ` testAnyFlag()`.

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

Renvoie ` true ` si cet objet `flags` correspond à l'objet ` flags` donné.

Si flags comporte des indicateurs activés, cet objet de drapeaux correspond exactement si tous les indicateurs activés dans flags le sont également dans cet objet de drapeaux. Dans le cas contraire, lorsque flags ne comporte aucun indicateur activé, cet objet de drapeaux ne correspond que s’il ne comporte lui-même aucun indicateur activé.

Cette fonction a été introduite dans Qt 6.2.

Voir également testAnyFlags().

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

Renvoie la valeur stockée dans l'objet ` QFlags ` sous forme d'entier. Notez que l'entier renvoyé peut être signé ou non signé, selon que le type sous-jacent de l'énumération est signé ou non signé.

Cette fonction a été introduite dans Qt 6.2.

Voir aussi Int.

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

Renvoie la valeur stockée dans l'objet ` QFlags ` sous forme d'entier.

Voir aussi Int.

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

Renvoie ` true ` si aucun indicateur n'est activé (c'est-à-dire si la valeur stockée par l'objet ` QFlags ` est égale à 0) ; sinon, renvoie ` false`.

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

Renvoie un objet ` QFlags ` contenant le résultat de l’opération de ET binaire entre cet objet et ` mask`.

Cet opérateur est désactivé si la macro ` QT_TYPESAFE_FLAGS ` est définie. Notez qu’il n’est pas étendu à 64 bits pour les objets ` QFlags ` 64 bits non plus : pour la prise en charge 64 bits, utilisez la surcharge sécurisée par type.

Voir également operator&=(), operator|(), operator^() et operator~().

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

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

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

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

Cette fonction a été introduite dans Qt 6.2.

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

Cet opérateur est désactivé si la macro ` QT_TYPESAFE_FLAGS ` est définie. Notez qu’il n’est pas non plus étendu au 64 bits pour les ` QFlags ` 64 bits : pour la prise en charge du 64 bits, utilisez la surcharge « type-safe ».

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

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

Effectue une opération de ET bit à bit avec ` mask ` et stocke le résultat dans cet objet ` QFlags `. Renvoie une référence à cet objet.

Cet opérateur est désactivé si la macro ` QT_TYPESAFE_FLAGS ` est définie. Notez qu’il n’est pas non plus étendu au 64 bits pour les objets ` QFlags ` 64 bits : pour la prise en charge du 64 bits, utilisez la surcharge sécurisée au niveau du type.

Voir également operator&(), operator|=() et operator^=().

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

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

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

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

Cette fonction a été introduite dans Qt 6.2.

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

Cet opérateur est désactivé si la macro ` QT_TYPESAFE_FLAGS ` est définie. Notez qu’il n’est pas non plus étendu au 64 bits pour les ` QFlags ` de 64 bits : pour la prise en charge du 64 bits, utilisez la surcharge « type-safe ».

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

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

Attribue la propriété « other » à cet objet et renvoie une référence à cet objet.

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

Renvoie un objet ` QFlags ` contenant le résultat de l'opération XOR bit à bit entre cet objet et ` other`.

Voir également operator^=(), operator&(), operator|() et operator~().

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

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

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

Effectue une opération XOR bit à bit avec other et stocke le résultat dans cet objet QFlags. Renvoie une référence à cet objet.

Voir également operator^(), operator&=() et operator|=().

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

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

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

Renvoie un objet ` QFlags ` contenant le résultat de l'opération de OU binaire entre cet objet et ` other`.

Voir également operator|=(), operator^(), operator&() et operator~().

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

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

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

Effectue une opération de OU binaire avec other et stocke le résultat dans cet objet QFlags. Renvoie une référence à cet objet.

Voir également operator|(), operator&=() et operator^=().

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

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

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

Renvoie un objet de type « QFlags » contenant la négation binaire de cet objet.

Voir également operator&(), operator|() et operator^().

Éléments non membres associés

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

Renvoie la valeur de hachage de key, en utilisant seed comme graine pour le calcul.

Cette fonction a été introduite dans Qt 6.2.

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

Compare lhs et rhs pour vérifier s'ils sont inégaux ; les deux arguments sont considérés comme différents s'ils ne représentent pas exactement la même valeur (masque de bits).

Ces fonctions ont été introduites dans Qt 6.2.

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

Compare les valeurs lhs et rhs pour vérifier si elles sont égales ; les deux arguments sont considérés comme égaux s'ils représentent exactement la même valeur (masque de bits).

Ces fonctions ont été introduites dans Qt 6.2.

Documentation des macros

Q_DECLARE_FLAGS(Flags, Enum)

La macro Q_DECLARE_FLAGS() se développe en

typedef QFlags<Enum> Flags;

Enum est le nom d’un type énuméré existant, tandis que Flags est le nom de la définition de type <Enum> de QFlags.

Pour plus de détails, consultez la documentation relative à QFlags.

Voir également Q_DECLARE_OPERATORS_FOR_FLAGS().

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

La macro Q_DECLARE_OPERATORS_FOR_FLAGS() déclare les fonctions d'opérateurs bit à bit globaux operator|(), operator&(), operator^(), operator~() ainsi que leurs formes d'affectation : &=, |= et ^=, pour Flags, qui est de type QFlags<T>.

Pour plus de détails, consultez la documentation relative à QFlags.

Voir également 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.