Spec-Zone.ru › Qt 5.12

Класс 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/qt-5.12/qflags.html

Spec-Zone.ru

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