Класс QFlags
Класс QFlags предоставляет безопасный способ хранения комбинаций значений перечисления, объединённых операцией ИЛИ. Подробнее...
| Заголовок: | #include <QFlags> |
| qmake: | QT += core |
Типы public
| typedef | Int |
| typedef | enum_type |
Функции public
| QFlags(std::initializer_list<Enum> flags) | |
| QFlags(QFlag flag) | |
| QFlags(QFlags::Zero = Q_NULLPTR) | |
| QFlags(Enum flags) | |
| QFlags(const QFlags<T> &other) | |
| QFlags<T> & | operator=(const QFlags<T> &other) |
| 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^(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<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(std::initializer_list<Enum> flags)
Конструирует объект QFlags, инициализированный всеми flags, объединёнными операцией побитового ИЛИ.
Эта функция была введена в Qt 5.4.
См. также operator|=() и operator|().
QFlags::QFlags(QFlag flag)
Конструирует объект QFlags, инициализированный целым значением flag.
Тип QFlag — вспомогательный тип. Использование его здесь вместо int, фактически гарантирует, что произвольные значения перечисления не могут быть преобразованы в QFlags, в то время как нетипизированные значения перечисления (т.е., значения int ) могут.
QFlags::QFlags(QFlags::Zero = Q_NULLPTR)
Конструирует объект QFlags без установленных флагов. Параметр должен быть значением 0.
QFlags::QFlags(Enum flags)
Конструирует объект QFlags, хранящий flags.
QFlags::QFlags(const QFlags<T> &other)
Конструирует копию other.
QFlags<T> &QFlags::operator=(const QFlags<T> &other)
Присваивает other данному объекту и возвращает ссылку на данный объект.
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^(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^().
Документация макросов
QFlags::Q_DECLARE_FLAGS(Flags, Enum)
Макрос Q_DECLARE_FLAGS() расширяется до
typedef QFlags<Enum> Flags;
Enum — имя существующего типа перечисления, а Flags — имя typedef QFlags<Enum>.
См. документацию QFlags для подробностей.
См. также Q_DECLARE_OPERATORS_FOR_FLAGS().
QFlags::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.13/qflags.html