Spec-Zone.ru › Qt 5.11

Класс QFlags

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

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

Открытые типы

typedef Int
typedef enum_type

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

QFlags(const QFlags<T> &other)
QFlags(Enum flags)
QFlags(QFlags::Zero = Q_NULLPTR)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> flags)
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=(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

Макросы

Q_DECLARE_FLAGS(Flags, Enum)
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

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

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

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

Традиционный подход в C++ для хранения логических ИЛИ-комбинаций значений перечислений заключается в использовании переменной типа 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(const QFlags<T> &other)

Создаёт копию other.

QFlags::QFlags(Enum flags)

Создаёт объект QFlags, хранящий флаги flags.

QFlags::QFlags(QFlags::Zero = Q_NULLPTR)

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

QFlags::QFlags(QFlag flag)

Создаёт объект QFlags, инициализированный целым значением flag.

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

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

Создаёт объект QFlags, инициализированный всеми flags, объединёнными оператором побитового ИЛИ.

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

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

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, содержащий результат побитового И операции над этим объектом и 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)

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

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

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

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

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

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

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

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

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, содержащий результат побитовой операции ИЛИ над этим объектом и other.

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

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

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

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

Выполняет побитовую операцию ИЛИ с 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/archives/qt-5.11/qflags.html

Spec-Zone.ru

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