Spec-Zone.ru › Qt 6.1

Класс QFlags

шаблон <typename Enum> класс QFlags

Класс QFlags предоставляет безопасный способ хранения сочетаний значений перечисления с помощью операции OR. Подробнее...

Заголовок: #include <QFlags>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая наследуемые

Типы

Int
enum_type

Открытые функции

QFlags(std::initializer_list<Enum> flags)
QFlags(QFlag flag)
QFlags(Enum flags)
QFlags()
QFlags(const QFlags<T> &other)
QFlags<T> & operator=(const QFlags<T> &other)
QFlags<T> & setFlag(Enum flag, bool on = true)
bool testFlag(Enum flag) const
QFlags::Int operator QFlags::Int() const
bool operator!() const
QFlags<T> operator&(int mask) const
QFlags<T> operator&(uint mask) const
QFlags<T> operator&(Enum other) const
QFlags<T> & operator&=(int mask)
QFlags<T> & operator&=(uint mask)
QFlags<T> & operator&=(Enum mask)
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

Макросы

Q_DECLARE_FLAGS(Flags, Enum)
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Подробное описание

Класс QFlags<Enum> — это шаблонный класс, где Enum — тип перечисления. QFlags используется в Qt для хранения комбинаций значений перечисления.

Традиционный подход C++ для хранения комбинаций значений перечисления с помощью операции OR заключается в использовании переменной типа int или uint. Неудобство этого подхода заключается в том, что никакой проверки типов нет; любое значение перечисления может быть объединёно с любым другим значением перечисления и передано функции, которая принимает int или uint.

Qt использует QFlags для обеспечения безопасности типов. Например, тип Qt::Alignment — это просто псевдоним для QFlags<Qt::AlignmentFlag>. QLabel::setAlignment() принимает параметр Qt::Alignment, что означает, что любая комбинация значений Qt::AlignmentFlag или { }, является допустимой:

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

Если вы попытаетесь передать значение из другого перечисления или просто целое число, отличное от 0, компилятор сообщит об ошибке. Если вам нужно преобразовать целые значения в флаги нетипизированным способом, вы можете использовать явный конструктор QFlags в качестве оператора преобразования.

Если вы хотите использовать QFlags для собственных типов перечисления, используйте Q_DECLARE_FLAGS() и Q_DECLARE_OPERATORS_FOR_FLAGS().

Пример:

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)

Вы можете использовать тип MyClass::Options для хранения комбинаций значений MyClass::Option.

Флаги и система метаобъектов

Макрос Q_DECLARE_FLAGS() не делает флаги доступными для системы метаобъектов, поэтому их нельзя использовать в Qt Script или редактировать в Qt Designer. Чтобы сделать флаги доступными для этих целей, необходимо использовать макрос Q_FLAG():

Q_FLAG(Options)

Конвенция именования

Разумная конвенция именования для типов перечисления и связанных типов QFlags — присваивать единственное имя типу перечисления (например, Option) и множественное имя типу QFlags (например, Options). Если нужно единственное имя для типа QFlags (например, Alignment), можно использовать суффикс Flag для типа перечисления (например, AlignmentFlag).

См. также QFlag.

Документация по типам-членам

[since 5.0] QFlags::Int

Псевдоним для целочисленного типа, используемого для хранения, а также для неявного преобразования. Либо int , либо unsigned int, в зависимости от того, является ли базовый тип перечисления знаковым или беззнаковым.

Этот псевдоним был введен в Qt 5.0.

QFlags::enum_type

Псевдоним для шаблона типа Enum.

Документация по функциям-членам

[since 5.4] QFlags::QFlags(std::initializer_list<Enum> flags)

Конструирует объект QFlags, инициализированный всеми флагами, объединёнными с помощью оператора побитового ИЛИ.

Эта функция была введена в Qt 5.4.

См. также operator|=() и operator|().

QFlags::QFlags(QFlag flag)

Конструирует объект QFlags, инициализированный целым числом flag.

Тип QFlag — вспомогательный тип. Используя его здесь вместо int, мы эффективно гарантируем, что произвольные значения перечисления не могут быть преобразованы в QFlags, в то время как нетипизированные значения перечисления (т.е., значения int ) могут.

QFlags::QFlags(Enum flags)

Конструирует объект QFlags, хранящий флаги.

[since 5.15] QFlags::QFlags()

Конструирует объект QFlags без установленных флагов.

Эта функция была введена в Qt 5.15.

QFlags::QFlags(const QFlags<T> &other)

Конструирует копию other.

QFlags<T> &QFlags::operator=(const QFlags<T> &other)

Присваивает other текущему объекту и возвращает ссылку на этот объект.

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

Устанавливает флаг flag, если on равно true или сбрасывает его, если on равно false. Возвращает ссылку на этот объект.

Эта функция была введена в Qt 5.7.

bool QFlags::testFlag(Enum flag) const

Возвращает true, если флаг flag установлен, в противном случае false.

QFlags::Int QFlags::operator QFlags::Int() const

Возвращает значение, хранящееся в объекте QFlags, как целое число.

См. также Int.

bool QFlags::operator!() const

Возвращает true, если ни один флаг не установлен (т. е., если значение, хранимое объектом QFlags, равно 0); в противном случае возвращает false.

QFlags<T> QFlags::operator&(int mask) const

Возвращает объект QFlags, содержащий результат побитовой операции AND над этим объектом и mask.

См. также operator&=(), operator|(), operator^() и operator~().

QFlags<T> QFlags::operator&(uint mask) const

Это перегруженная функция.

QFlags<T> QFlags::operator&(Enum other) const

Это перегруженная функция.

QFlags<T> &QFlags::operator&=(int mask)

Выполняет побитовую операцию AND с mask и сохраняет результат в этом объекте QFlags. Возвращает ссылку на этот объект.

См. также operator&(), operator|=() и operator^=().

QFlags<T> &QFlags::operator&=(uint mask)

Это перегруженная функция.

QFlags<T> &QFlags::operator&=(Enum mask)

Это перегруженная функция.

QFlags<T> QFlags::operator^(QFlags<T> other) const

Возвращает объект QFlags, содержащий результат побитовой операции XOR над этим объектом и other.

См. также operator^=(), operator&(), operator|() и operator~().

QFlags<T> QFlags::operator^(Enum other) const

Это перегруженная функция.

QFlags<T> &QFlags::operator^=(QFlags<T> other)

Выполняет побитовую операцию XOR с other и сохраняет результат в этом объекте QFlags. Возвращает ссылку на этот объект.

См. также operator^(), operator&=() и operator|=().

QFlags<T> &QFlags::operator^=(Enum other)

Это перегруженная функция.

QFlags<T> QFlags::operator|(QFlags<T> other) const

Возвращает объект QFlags, содержащий результат побитовой операции OR над этим объектом и other.

См. также operator|=(), operator^(), operator&() и operator~().

QFlags<T> QFlags::operator|(Enum other) const

Это перегруженная функция.

QFlags<T> &QFlags::operator|=(QFlags<T> other)

Выполняет побитовую операцию OR с other и сохраняет результат в этом объекте QFlags. Возвращает ссылку на этот объект.

См. также operator|(), operator&=() и operator^=().

QFlags<T> &QFlags::operator|=(Enum other)

Это перегруженная функция.

QFlags<T> QFlags::operator~() const

Возвращает объект QFlags, который содержит побитовое отрицание этого объекта.

См. также operator&(), operator|() и operator^().

Документация по макросам

Q_DECLARE_FLAGS(Flags, Enum)

Макрос Q_DECLARE_FLAGS() расширяется до

typedef QFlags<Enum> Flags;

Enum — это имя существующего типа перечисления, а Flags — имя типа QFlags<Enum>.

Подробнее см. в документации к QFlags.

См. также Q_DECLARE_OPERATORS_FOR_FLAGS().

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Макрос Q_DECLARE_OPERATORS_FOR_FLAGS() объявляет глобальные operator|() функции для Flags, который имеет тип QFlags<T>.

Подробнее см. в документации к QFlags.

См. также Q_DECLARE_FLAGS().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qflags.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API