Spec-Zone.ru › Qt 5.15

Класс QFlags

шаблон <typename Enum> class QFlags

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

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

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

typedef Int
typedef enum_type

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

QFlags(std::initializer_list<Enum> flags)
QFlags(QFlag flag)
QFlags(Enum flags)
QFlags()
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

Макросы

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 или { } допустима:

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.

Документация по типам членов

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(Enum flags)

Создаёт объект QFlags, хранящий flags.

QFlags::QFlags()

Создаёт объект QFlags без установленных флагов.

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

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, содержащий результат побитовой операции AND над этим объектом и 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)

Выполняет побитовую операцию AND с 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, содержащий результат побитовой операции OR над этим объектом и other.

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

QFlags<T> QFlags::operator|(Enum other) const

Это перегруженная функция.

QFlags<T> &QFlags::operator|=(QFlags<T> other)

Выполняет побитовую операцию OR с 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/qt-5.15/qflags.html

Spec-Zone.ru

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