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