Spec-Zone.ru › Qt 5.6

Класс QFlags

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

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

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

typedef Int
typedef enum_type

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

QFlags(const QFlags &other)
QFlags(Enum flag)
QFlags(Zero zero = Q_NULLPTR)
QFlags(QFlag value)
QFlags(std::initializer_list<Enum> flags)
bool testFlag(Enum flag) const
operator Int() const
bool operator!() const
QFlags operator&(int mask) const
QFlags operator&(uint mask) const
QFlags operator&(Enum mask) const
QFlags & operator&=(int mask)
QFlags & operator&=(uint mask)
QFlags & operator&=(Enum mask)
QFlags & operator=(const QFlags &other)
QFlags operator^(QFlags other) const
QFlags operator^(Enum other) const
QFlags & operator^=(QFlags other)
QFlags & operator^=(Enum other)
QFlags operator|(QFlags other) const
QFlags operator|(Enum other) const
QFlags & operator|=(QFlags other)
QFlags & operator|=(Enum other)
QFlags 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 &other)

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

QFlags::QFlags(Enum flag)

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

QFlags::QFlags(Zero zero = Q_NULLPTR)

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

QFlags::QFlags(QFlag value)

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

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

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

Создает объект QFlags, инициализированный всеми flags, объединенными с помощью оператора побитовой дизъюнкции.

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

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

bool QFlags::testFlag(Enum flag) const

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

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

QFlags::operator Int() const

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

См. также Int.

bool QFlags::operator!() const

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

QFlags QFlags::operator&(int mask) const

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

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

QFlags QFlags::operator&(uint mask) const

Это перегруженный метод.

QFlags QFlags::operator&(Enum mask) const

Это перегруженный метод.

QFlags &QFlags::operator&=(int mask)

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

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

QFlags &QFlags::operator&=(uint mask)

Это перегруженный метод.

QFlags &QFlags::operator&=(Enum mask)

Это перегруженный метод.

QFlags &QFlags::operator=(const QFlags &other)

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

QFlags QFlags::operator^(QFlags other) const

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

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

QFlags QFlags::operator^(Enum other) const

Это перегруженный метод.

QFlags &QFlags::operator^=(QFlags other)

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

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

QFlags &QFlags::operator^=(Enum other)

Это перегруженный метод.

QFlags QFlags::operator|(QFlags other) const

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

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

QFlags QFlags::operator|(Enum other) const

Это перегруженный метод.

QFlags &QFlags::operator|=(QFlags other)

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

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

QFlags &QFlags::operator|=(Enum other)

Это перегруженный метод.

QFlags 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.6/qflags.html

Spec-Zone.ru

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