Spec-Zone.ru › Qt 5.14

Класс QFlags

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

Заголовок: #include <QFlags>
qmake: QT += core
  • Список всех членов, включая унаследованные

Типы публичного доступа

typedef Int
typedef enum_type

Функции публичного доступа

QFlags(std::initializer_list<Enum> flags)
QFlags(QFlag flag)
QFlags(QFlags::Zero = nullptr)
QFlags(Enum flags)
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 или 0 допустима:

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

Если вы попытаетесь передать значение из другого перечисления или просто целое число, отличное от 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.

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

typedef QFlags::Int

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

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

typedef QFlags::enum_type

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

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

QFlags::QFlags(std::initializer_list<Enum> flags)

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

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

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

QFlags::QFlags(QFlag flag)

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

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

QFlags::QFlags(QFlags::Zero = nullptr)

Конструирует объект QFlags без установленных флагов. Параметр должен быть литеральным значением 0.

QFlags::QFlags(Enum flags)

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

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

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

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

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

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.

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

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 — имя typedef 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-5.14/qflags.html

Spec-Zone.ru

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