이 페이지에서

QFlags Class

template <typename Enum> class QFlags

QFlags 클래스는 열거형 값들의 OR 조합을 저장할 수 있는 유형 안전한 방법을 제공합니다. 더 보기...

헤더: #include <QFlags>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QtPrivate::QFlagsStorageHelper

공개 유형

공개 함수

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> flags)
(since 6.9) QFlags(std::in_place_t, QFlags<T>::Int flags)
QFlags(const QFlags<T> &other)
QFlags<T> &setFlag(Enum flag, bool on = true)
(since 6.2) bool testAnyFlag(Enum flag) const
(since 6.2) bool testAnyFlags(QFlags<T> flags) const
bool testFlag(Enum flag) const
(since 6.2) bool testFlags(QFlags<T> flags) const
(since 6.2) QFlags<T>::Int toInt() const
operator QFlags<T>::Int() const
bool operator!() const
QFlags<T> operator&(int mask) const
QFlags<T> operator&(Enum mask) const
(since 6.2) QFlags<T> operator&(QFlags<T> mask) const
QFlags<T> operator&(uint mask) const
QFlags<T> &operator&=(int mask)
QFlags<T> &operator&=(Enum mask)
(since 6.2) QFlags<T> &operator&=(QFlags<T> mask)
QFlags<T> &operator&=(uint mask)
int &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

정적 공용 멤버

(since 6.2) QFlags<T> fromInt(QFlags<T>::Int i)
(since 6.2) size_t qHash(QFlags<Enum> key, size_t seed = 0)
(since 6.2) bool operator!=(Enum lhs, QFlags<T> rhs)
(since 6.2) bool operator!=(QFlags<T> lhs, Enum rhs)
(since 6.2) bool operator!=(QFlags<T> lhs, QFlags<T> rhs)
(since 6.2) bool operator==(Enum lhs, QFlags<T> rhs)
(since 6.2) bool operator==(QFlags<T> lhs, Enum rhs)
(since 6.2) bool operator==(QFlags<T> lhs, QFlags<T> rhs)

매크로

상세 설명

QFlags<ENUM>은 Enum 이 열거형인 템플릿 클래스입니다. QFlags는 열거형 값의 조합을 저장하기 위해 Qt 전반에 걸쳐 사용됩니다.

열거형 값의 OR 조합을 저장하는 전통적인 C++ 방식은 int 또는 uint 변수를 사용하는 것입니다. 이 방식의 불편한 점은 유형 검증이 전혀 이루어지지 않는다는 것입니다. 어떤 열거형 값이든 다른 열거형 값과 OR 연산을 수행하여, int 또는 uint 매개변수를 받는 함수에 전달할 수 있습니다.

Qt 6.9부터 QFlags는 64비트 열거형을 지원합니다. 32비트를 초과할 경우, 열거자 하나를 제거하더라도 열거형이나 QFlags 유형의 크기가 변하지 않도록 보장하기 위해 명시적(고정) 기본 유형을 사용하는 것이 권장됩니다. 일부 컴파일러의 경우, 명시적인 기본 유형이 지정된 경우에만 enum 유형의 크기를 32비트 이상으로 확장합니다.

Qt::AlignmentFlagQt는 QFlags를 사용하여 유형 안전성을 보장합니다. 예를 들어, Qt::Alignment 유형은 단순히 QFlags<XML-ph-0001@deepl.internal>에 대한 typedef입니다. 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()를 사용하십시오. 이 경우 Q_DECLARE_FLAGS()는 해당 열거형과 동일한 범위(클래스 또는 네임스페이스)에 있어야 합니다.

예시:

class MyClass_1
{
public:
    enum Option {
        NoOptions = 0x0,
        ShowTabs = 0x1,
        ShowAll = 0x2,
        SqueezeBlank = 0x4
    };
    Q_DECLARE_FLAGS(Options, Option)
    //...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_1::Options)

그러면 MyClass::Options 유형을 사용하여 MyClass::Option 값들의 조합을 저장할 수 있습니다.

플래그와 메타 객체 시스템

Q_DECLARE_FLAGS() 매크로는 플래그를 메타 객체 시스템에 노출하지 않으므로, Qt Script에서 사용하거나 Qt Widgets Designer 에서 편집할 수 없습니다. 이러한 목적으로 플래그를 사용할 수 있게 하려면 Q_FLAG() 매크로를 사용해야 합니다:

class MyClass_2
{
    Q_OBJECT
public:
    enum Option {
        NoOptions = 0x0,
        ShowTabs = 0x1,
        ShowAll = 0x2,
        SqueezeBlank = 0x4
    };
    Q_DECLARE_FLAGS(Options, Option)
    Q_FLAG(Options)
    //...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_2::Options)

명명 규칙

열거형(enum) 유형과 관련된 QFlags 유형에 대한 합리적인 명명 규칙은 열거형 유형에는 단수형 이름을(예: Option), QFlags 유형에는 복수형 이름을(예: Options) 부여하는 것입니다. QFlags 유형에 단수형 이름을 사용하고자 하는 경우(예: Alignment), 열거형 유형의 접미사로 Flag 를 사용할 수 있습니다(예: AlignmentFlag).

멤버 유형 문서

[alias] QFlags::Int

저장 및 암시적 변환에 사용되는 정수 유형에 대한 typedef입니다. 열거형의 기본 유형이 부호 있는(signed)지 부호 없는(unsigned)지에 따라 qintXX 또는 quintXX 중 하나가 되며, Qt 6.9부터는 열거형의 크기에도 따라 달라집니다. 일반적으로 qint32 (int) 또는 quint32 (unsigned)가 됩니다.

QFlags::enum_type

열거형 템플릿 유형에 대한 typedef.

멤버 함수 설명서

[constexpr noexcept default] QFlags::QFlags()

플래그가 설정되지 않은 QFlags 객체를 생성합니다.

[constexpr noexcept] QFlags::QFlags(Enum flags)

flags 를 저장하는 QFlags 객체를 생성합니다.

[constexpr noexcept] QFlags::QFlags(QFlag flag) requires (sizeof(Enum) == sizeof(int))

정수 flag 로 초기화된 QFlags 객체를 생성합니다.

QFlag 유형은 헬퍼 유형입니다. 여기서 int 대신 이를 사용함으로써, 임의의 열거형 값은 QFlags로 형변환될 수 없도록 효과적으로 보장하는 반면, 유형이 지정되지 않은 열거형 값(즉, int 값)은 형변환될 수 있도록 합니다.

이 생성자는 32비트 Enum 유형에만 존재합니다. 모든 열거형 크기를 지원하려면 std::in_place_t 를 사용하는 생성자를 고려해 보십시오.

[constexpr noexcept] QFlags::QFlags(std::initializer_list<Enum> flags)

비트별 OR 연산자를 사용하여 모든 flags 를 결합한 값으로 초기화된 QFlags 객체를 생성합니다.

operator|=() 및 operator|()도 참조하십시오 .

[constexpr noexcept, since 6.9] QFlags::QFlags(std::in_place_t, QFlags<T>::Int flags)

정수 flags 로 초기화된 QFlags 객체를 생성합니다.

이 함수는 Qt 6.9에서 도입되었습니다.

[implicit] QFlags::QFlags(const QFlags<T> &other)

other 의 복사본을 생성합니다.

[static constexpr noexcept, since 6.2] QFlags<T> QFlags::fromInt(QFlags<T>::Int i)

정수 값 i 을 나타내는 ` QFlags ` 객체를 생성합니다.

이 함수는 Qt 6.2에서 도입되었습니다.

[constexpr noexcept] QFlags<T> &QFlags::setFlag(Enum flag, bool on = true)

on 가 true 인 경우 flag 플래그를 설정하고, on 가 false 인 경우 해당 플래그를 해제합니다. 이 객체에 대한 참조를 반환합니다.

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlag(Enum flag) const

flag 에 설정된 플래그 중 하나라도 이 플래그 객체에 설정되어 있으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. flag 에 설정된 플래그가 없으면 반환값은 항상 ` false`가 됩니다.

이 함수는 Qt 6.2에서 도입되었습니다.

testFlag()도 참조하십시오 .

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlags(QFlags<T> flags) const

flags 에 설정된 플래그 중 하나라도 이 플래그 객체에 설정되어 있으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. flags 에 설정된 플래그가 없으면 반환값은 항상 ` false`가 됩니다.

이 함수는 Qt 6.2에서 도입되었습니다.

testFlags()도 참조하십시오 .

[constexpr noexcept] bool QFlags::testFlag(Enum flag) const

flag 플래그가 설정되어 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

참고: ` flag `에 1로 설정된 비트가 여러 개 포함된경우 (예를 들어, 다른 열거자의 비트별 OR 연산 결과와 동일한 열거자인 경우), 이 함수는 해당 플래그 객체의 모든 비트가 설정되어 있을 때만 ` true `을 반환합니다. 반면, ` flag `에 1로 설정된 비트가 하나도 없는 경우(즉, 정수 값이 0인 경우), 이 함수는 이 `flags` 객체에도 1로 설정된 비트가 하나도 없을 때에만 ` true `를 반환합니다.

testAnyFlag()도 참조하십시오 .

[constexpr noexcept, since 6.2] bool QFlags::testFlags(QFlags<T> flags) const

이 플래그 객체가 주어진 flags 과 일치하면 true 를 반환합니다.

flags 에 설정된 플래그가 있는 경우, flags 에 설정된 모든 플래그가 이 플래그 객체에도 설정되어 있을 때만 이 플래그 객체가 정확히 일치합니다. 반대로, flags 에 설정된 플래그가 없는 경우, 이 플래그 객체에도 설정된 플래그가 없을 때만 일치합니다.

이 함수는 Qt 6.2에서 도입되었습니다.

testAnyFlags()도 참조하십시오 .

[constexpr noexcept, since 6.2] QFlags<T>::Int QFlags::toInt() const

QFlags 객체에 저장된 값을 정수형으로 반환합니다. 반환되는 정수는 열거형의 기본 유형이 부호 있는 유형인지 부호 없는 유형인지에 따라 부호 있는 정수이거나 부호 없는 정수일 수 있습니다.

이 함수는 Qt 6.2에서 도입되었습니다.

Int도 참조하십시오 .

[constexpr noexcept] QFlags::operator QFlags<T>::Int() const

QFlags 객체에 저장된 값을 정수형으로 반환합니다.

Int도 참조하십시오 .

[constexpr noexcept] bool QFlags::operator!() const

플래그가 설정되어 있지 않은 경우(즉, ` QFlags ` 객체에 저장된 값이 0인 경우) ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

[constexpr noexcept] QFlags<T> QFlags::operator&(int mask) const

이 객체와 ` mask`에 대한 비트별 AND 연산 결과를 포함하는 ` QFlags ` 객체를 반환합니다.

QT_TYPESAFE_FLAGS 매크로가 정의된 경우 이 연산자는 비활성화됩니다. 또한 64비트 QFlags 에 대해서도 64비트로 확장되지 않는다는 점에 유의하십시오. 64비트 지원을 위해서는 유형 안전 오버로드를 사용하십시오.

operator&=(), operator|(), operator^(), operator~()도 참조하십시오 .

[constexpr noexcept] QFlags<T> QFlags::operator&(Enum mask) const

이것은 오버로드된 함수입니다.

[constexpr noexcept, since 6.2] QFlags<T> QFlags::operator&(QFlags<T> mask) const

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.2에서 도입되었습니다.

[constexpr noexcept] QFlags<T> QFlags::operator&(uint mask) const

QT_TYPESAFE_FLAGS 매크로가 정의된 경우 이 연산자는 비활성화됩니다. 또한 64비트 QFlags 의 경우에도 64비트로 확장되지 않는다는 점에 유의하십시오. 64비트를 지원하려면 유형 안전 오버로드를 사용하십시오.

이 함수는 오버로드된 함수입니다.

[constexpr noexcept] QFlags<T> &QFlags::operator&=(int mask)

mask 와 비트별 AND 연산을 수행하고, 그 결과를 이 QFlags 객체에 저장합니다. 이 객체에 대한 참조를 반환합니다.

QT_TYPESAFE_FLAGS 매크로가 정의된 경우 이 연산자는 비활성화됩니다. 또한 64비트 QFlags 의 경우에도 64비트로 확장되지 않는다는 점에 유의하십시오. 64비트 지원을 위해서는 유형 안전 오버로드를 사용하십시오.

operator&(), operator|=(), operator^=()도 참조하십시오 .

[constexpr noexcept] QFlags<T> &QFlags::operator&=(Enum mask)

이것은 오버로드된 함수입니다.

[constexpr noexcept, since 6.2] QFlags<T> &QFlags::operator&=(QFlags<T> mask)

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.2에서 도입되었습니다.

[constexpr noexcept] QFlags<T> &QFlags::operator&=(uint mask)

QT_TYPESAFE_FLAGS 매크로가 정의된 경우 이 연산자는 비활성화됩니다. 또한 64비트 ` QFlags `의 경우에도 64비트로 확장되지 않는다는 점에 유의하십시오. 64비트 지원을 위해서는 유형 안전 오버로드를 사용하십시오.

이 함수는 오버로드된 함수입니다.

[implicit] int &QFlags::operator=(const QFlags<T> &other)

이 객체에 ` other `를 할당하고, 이 객체에 대한 참조를 반환합니다.

[constexpr noexcept] QFlags<T> QFlags::operator^(QFlags<T> other) const

이 객체와 ` other`에 대한 비트 단위 XOR 연산 결과를 포함하는 ` QFlags ` 객체를 반환합니다.

operator^=(), operator&(), operator|() 및 operator~()도 참조하십시오 .

[constexpr noexcept] QFlags<T> QFlags::operator^(Enum other) const

이것은 오버로드된 함수입니다.

[constexpr noexcept] QFlags<T> &QFlags::operator^=(QFlags<T> other)

other 와 비트 단위 XOR 연산을 수행하고, 그 결과를 이 QFlags 객체에 저장합니다. 이 객체에 대한 참조를 반환합니다.

operator^(), operator&=() 및 operator|=()도 참조하십시오 .

[constexpr noexcept] QFlags<T> &QFlags::operator^=(Enum other)

이것은 오버로드된 함수입니다.

[constexpr noexcept] QFlags<T> QFlags::operator|(QFlags<T> other) const

이 객체와 ` other`에 대한 비트별 OR 연산 결과를 포함하는 ` QFlags ` 객체를 반환합니다.

operator|=(), operator^(), operator&(), operator~()도 참조하십시오 .

[constexpr noexcept] QFlags<T> QFlags::operator|(Enum other) const

이것은 오버로드된 함수입니다.

[constexpr noexcept] QFlags<T> &QFlags::operator|=(QFlags<T> other)

other 와 비트별 OR 연산을 수행하고, 그 결과를 이 QFlags 객체에 저장합니다. 이 객체에 대한 참조를 반환합니다.

operator|(), operator&=() 및 operator^=()도 참조하십시오 .

[constexpr noexcept] QFlags<T> &QFlags::operator|=(Enum other)

이것은 오버로드된 함수입니다.

[constexpr noexcept] QFlags<T> QFlags::operator~() const

이 객체의 비트 단위 부정 연산 결과를 포함하는 ` QFlags ` 객체를 반환합니다.

operator&(), operator|(), operator^()도 참조하십시오 .

관련 비멤버 함수

[constexpr noexcept, since 6.2] template <typename Enum> size_t qHash(QFlags<Enum> key, size_t seed = 0)

seed 를 계산의 시드로 사용하여 key 의 해시 값을 반환합니다.

이 함수는 Qt 6.2에서 도입되었습니다.

[constexpr noexcept, since 6.2] bool operator!=(Enum lhs, QFlags<T> rhs)

[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, Enum rhs)

[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, QFlags<T> rhs)

lhs 와 rhs 의 부등식을 비교합니다. 두 인자가 정확히 동일한 값(비트 마스크)을 나타내지 않는 경우 서로 다른 것으로 간주됩니다.

이 함수들은 Qt 6.2에서 도입되었습니다.

[constexpr noexcept, since 6.2] bool operator==(Enum lhs, QFlags<T> rhs)

[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, Enum rhs)

[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, QFlags<T> rhs)

lhs 와 rhs 의 동일성을 비교합니다. 두 인자가 정확히 동일한 값(비트 마스크)을 나타낼 경우 동일하다고 간주됩니다.

이 함수들은 Qt 6.2에서 도입되었습니다.

매크로 문서

Q_DECLARE_FLAGS(Flags, Enum)

Q_DECLARE_FLAGS() 매크로는

typedef QFlags<Enum> Flags;

Enum 는 기존 열거형(enum)의 이름인 반면, Flags 는 QFlags<Enum> typedef의 이름입니다.

자세한 내용은 QFlags 문서를 참조하십시오.

Q_DECLARE_OPERATORS_FOR_FLAGS()도 참조하십시오 .

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Q_DECLARE_OPERATORS_FOR_FLAGS() 매크로는 전역 비트 연산자 함수 operator|(), operator&(), operator^(), operator~() 및 이들의 할당 연산자(&=, |=, ^=)를 선언합니다. 이 함수들은 QFlags<T> 타입의 Flags 에 대해 정의됩니다.

자세한 내용은 QFlags 문서를 참조하십시오.

Q_DECLARE_FLAGS()도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.