QFlags Class
template <typename Enum> class QFlagsQFlags 클래스는 열거형 값의 OR 조합을 저장하는 유형 안전 방식을 제공합니다. 더 보기...
Header: | #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 |
QFlags<T>::Int | 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) |
매크로
Q_DECLARE_FLAGS(Flags, Enum) | |
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
상세 설명
QFlags<Enum> 클래스는 템플릿 클래스이며, 여기서 Enum은 열거형입니다. QFlags는 열거형 값의 조합을 저장하기 위해 Qt 전체에서 사용됩니다.
열거형 값의 OR 조합을 저장하는 전통적인 C++ 접근 방식은 int
또는 uint
변수를 사용하는 것입니다. 이 접근법의 불편한 점은 타입 검사가 전혀 없다는 것입니다. 어떤 열거형 값이라도 다른 열거형 값과 OR할 수 있으며 int
또는 uint
을 취하는 함수에 전달할 수 있습니다.
Qt 6.9부터 QFlags는 64비트 열거형을 지원합니다. 32비트를 초과하는 경우 명시적(고정) 기본 유형을 사용하여 열거형이나 QFlags 유형이 열거자를 제거해도 크기가 변경되지 않도록 하는 것이 좋습니다. 일부 컴파일러는 명시적 기본 형을 사용하여 enum
형을 32비트보다 크게 만들기도 합니다.
Qt는 QFlags를 사용하여 타입 안전성을 제공합니다. 예를 들어, Qt::Alignment 타입은 단순히 QFlags<Qt::AlignmentFlag>에 대한 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()를 사용하세요.
예시:
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 스크립트에서 사용하거나 Qt Widgets Designer 에서 편집할 수 없습니다. 이러한 용도로 플래그를 사용하려면 Q_FLAG() 매크로를 사용해야 합니다:
Q_FLAG(Options)
명명 규칙
열거형과 관련 QFlags 유형에 대한 합리적인 명명 규칙은 열거형에 단수 이름(예: Option
)을 지정하고 QFlags 유형에 복수 이름(예: Options
)을 지정하는 것입니다. 단수 이름(예: Alignment
)이 필요한 경우 열거형 유형에 Flag
을 접미사로 사용할 수 있습니다(예: AlignmentFlag
).
멤버 유형 문서
[alias]
QFlags::Int
저장 및 암시적 변환에 사용되는 정수 유형에 대한 Typedef. qintXX
또는 quintXX
, 열거형의 기본 유형이 부호화되었는지 또는 부호화되지 않았는지 여부와 Qt 6.9부터 열거형의 크기에 따라 다릅니다. 일반적으로 qint32
(int
) 또는 quint32
(unsigned
)입니다.
QFlags::enum_type
열거형 템플릿 유형은 Typedef를 사용합니다.
멤버 함수 문서
[constexpr noexcept]
QFlags::QFlags()
플래그가 설정되지 않은 QFlags 객체를 생성합니다.
[constexpr noexcept]
QFlags::QFlags(Enum flags)
flags 을 저장하는 QFlags 객체를 생성합니다.
[constexpr noexcept]
QFlags::QFlags(QFlag flag)
정수 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)
정수로 초기화된 QFlags 객체를 구축합니다 flags.
이 함수는 Qt 6.9에 도입되었습니다.
[default]
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인 경우), 이 함수는 이 플래그 객체에도 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<T>::Int 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비트 지원의 경우 유형 안전 오버로드를 사용하세요.
[default]
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 객체를 반환합니다.
관련 비회원
[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에 도입되었습니다.
[constexpr noexcept, since 6.2]
template <typename Enum> size_t qHash(QFlags<Enum> key, size_t seed = 0)
seed 을 사용하여 key 의 해시값을 반환합니다.
이 함수는 Qt 6.2에 도입되었습니다.
매크로 문서
Q_DECLARE_FLAGS(Flags, Enum)
Q_DECLARE_FLAGS() 매크로는 다음과 같이 확장됩니다.
typedef QFlags<Enum> Flags;
Enum 는 기존 열거형 타입의 이름이고 Flags 는 QFlags<Enum> typedef의 이름입니다.
자세한 내용은 QFlags 문서를 참조하세요.
Q_DECLARE_OPERATORS_FOR_FLAGS()도 참조하세요 .
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Q_DECLARE_OPERATORS_FOR_FLAGS() 매크로는 Flags 에 대한 글로벌 operator|()
함수를 선언하며, 이는 QFlags<T> 유형입니다.
자세한 내용은 QFlags 설명서를 참조하십시오.
Q_DECLARE_FLAGS()도 참조하세요 .
© 2025 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.