Класс QFlags
шаблон <typename Enum> class QFlagsКласс QFlags предоставляет безопасный с точки зрения типов способ хранения OR-комбинаций значений перечисления. Подробнее...
| Заголовок: | #include <QFlags> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Типы публичного доступа
| Int | |
| enum_type |
Функции публичного доступа
| QFlags(const QFlags<T> &other) | |
| QFlags(std::initializer_list<Enum> flags) | |
| QFlags(QFlag flag) | |
| QFlags(Enum flags) | |
| QFlags() | |
| int & | operator=(const QFlags<T> &) |
| QFlags<T> & | setFlag(Enum flag, bool on = true) |
| bool | testAnyFlag(Enum flag) const |
| bool | testAnyFlags(QFlags<T> flags) const |
| bool | testFlag(Enum flag) const |
| bool | testFlags(QFlags<T> flags) const |
| QFlags::Int | toInt() 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&(QFlags<T> other) const |
| QFlags<T> | operator&(Enum other) const |
| QFlags<T> & | operator&=(int mask) |
| QFlags<T> & | operator&=(uint mask) |
Статические члены публичного доступа
| QFlags<T> | fromInt(QFlags::Int i) |
Связанные нечлены
| size_t | qHash(QFlags<Enum> flags, size_t seed = 0) |
Макросы
| Q_DECLARE_FLAGS(Flags, Enum) | |
| Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
Подробное описание
Класс QFlags<Enum> — это шаблонный класс, где Enum — это тип перечисления. QFlags используется в Qt для хранения комбинаций значений перечисления.
Традиционный подход C++ для хранения OR-комбинаций значений перечисления — это использование переменной int или uint. Неудобство этого подхода заключается в том, что проверки типов вообще нет; любое значение перечисления может быть объединено по оператору OR с любым другим значением перечисления и передано в функцию, принимающую int или uint.
Qt использует QFlags для обеспечения безопасности типов. Например, тип Qt::Alignment просто является псевдонимом для QFlags<Qt::AlignmentFlag>. QLabel::setAlignment() принимает параметр Qt::Alignment, что означает, что любая комбинация значений Qt::AlignmentFlag или { }, является допустимой:
label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
label->setAlignment({ }); Если вы попытаетесь передать значение из другого перечисления или просто целое число, отличное от 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.
Документация по типам членов
[since 5.0] QFlags::Int
Псевдоним для целого типа, используемого для хранения и неявного преобразования. Либо int или unsigned int, в зависимости от того, является ли базовый тип перечисления знаковым или беззнаковым.
Этот псевдоним был введен в Qt 5.0.
QFlags::enum_type
Псевдоним для шаблона типа Enum.
Документация по функциям членов
[default] QFlags::QFlags(const QFlags<T> &other)
Создаёт копию other.
[since 5.4] QFlags::QFlags(std::initializer_list<Enum> flags)
Создаёт объект QFlags, инициализированный всеми флагами, объединёнными с помощью битового оператора OR.
Эта функция была добавлена в Qt 5.4.
См. также operator|=() и operator|().
QFlags::QFlags(QFlag flag)
Создаёт объект QFlags, инициализированный целым числом flag.
Тип QFlag — вспомогательный тип. Используя его вместо int, мы гарантируем, что произвольные значения перечисления нельзя привести к QFlags, в то время как значения перечисления без типов (то есть, int значения) можно.
QFlags::QFlags(Enum flags)
Создаёт объект QFlags, хранящий флаги.
[since 5.15] QFlags::QFlags()
Создаёт объект QFlags без установленных флагов.
Эта функция была добавлена в Qt 5.15.
[default] int &QFlags::operator=(const QFlags<T> &)
Присваивает other этому объекту и возвращает ссылку на этот объект.
[static, since 6.2] QFlags<T> QFlags::fromInt(QFlags::Int i)
Создаёт объект QFlags, представляющий целое значение i.
Эта функция была добавлена в Qt 6.2.
[since 5.7] QFlags<T> &QFlags::setFlag(Enum flag, bool on = true)
Устанавливает флаг flag, если on равно true, или сбрасывает его, если on равно false. Возвращает ссылку на этот объект.
Эта функция была добавлена в Qt 5.7.
[since 6.2] bool QFlags::testAnyFlag(Enum flag) const
Возвращает true, если любой флаг, установленный в flag, также установлен в этом объекте флагов, в противном случае false. Если в flag нет установленных флагов, результат всегда false.
Эта функция была добавлена в Qt 6.2.
См. также testFlag().
[since 6.2] bool QFlags::testAnyFlags(QFlags<T> flags) const
Возвращает true, если любой флаг, установленный в flags, также установлен в этом объекте флагов, в противном случае false. Если в flags нет установленных флагов, результат всегда false.
Эта функция была добавлена в Qt 6.2.
См. также testFlags().
bool QFlags::testFlag(Enum flag) const
Возвращает true, если флаг flag установлен, в противном случае false.
Примечание: если flag содержит несколько установленных битов (например, если это перечисление равно битовому OR других перечислений), то эта функция вернёт true только в том случае, если все биты установлены в этом объекте флагов. С другой стороны, если flag не содержит установленных битов (то есть, его значение как целого числа равно 0), то эта функция вернёт true только в том случае, если в этом объекте флагов также нет установленных битов.
См. также testAnyFlag().
[since 6.2] bool QFlags::testFlags(QFlags<T> flags) const
Возвращает true если этот объект флагов соответствует заданным flags.
Если в flags установлены какие-либо флаги, этот объект флагов точно соответствует, если все флаги, установленные в flags, также установлены в этом объекте флагов. В противном случае, когда в flags нет установленных флагов, этот объект флагов соответствует только если в нём также нет установленных флагов.
Эта функция была добавлена в Qt 6.2.
См. также testAnyFlags().
[since 6.2] QFlags::Int QFlags::toInt() const
Возвращает значение, хранящееся в объекте QFlags, в виде целого числа. Обратите внимание, что возвращаемое целое число может быть со знаком или без знака, в зависимости от того, является ли базовый тип перечисления со знаком или без знака.
Эта функция была добавлена в Qt 6.2.
См. также Int.
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, содержащий результат битовой операции AND над этим объектом и mask.
См. также operator&=(), operator|(), operator^(), и operator~().
QFlags<T> QFlags::operator&(uint mask) const
Это перегруженная функция.
[since 6.2] QFlags<T> QFlags::operator&(QFlags<T> other) const
Это перегруженная функция.
Эта функция была добавлена в Qt 6.2.
QFlags<T> QFlags::operator&(Enum other) const
Это перегруженная функция.
QFlags<T> &QFlags::operator&=(int mask)
Выполняет битовую операцию AND с mask и сохраняет результат в этом объекте QFlags. Возвращает ссылку на этот объект.
См. также operator&(), operator|=(), и operator^=().
QFlags<T> &QFlags::operator&=(uint mask)
Это перегруженная функция.
[since 6.2] QFlags<T> &QFlags::operator&=(QFlags<T> mask)
Это перегруженная функция.
Эта функция была добавлена в Qt 6.2.
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, содержащий результат битовой операции OR над этим объектом и 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^().
Связанные нечленные функции
[since 6.2] template <typename Enum> size_t qHash(QFlags<Enum> flags, size_t seed = 0)
Вычисляет хеш для флагов flags, используя seed для инициализации вычисления.
Эта функция была добавлена в Qt 6.2.
Документация по макросам
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-6.2/qflags.html