Класс 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