QMetaType Class
QMetaType 클래스는 메타 객체 시스템에서 명명된 유형을 관리합니다. 더 보기...
Header: | #include <QMetaType> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
이 클래스는 동등 비교가 가능합니다.
참고: 이 클래스의 모든 함수는 스레드 안전합니다.
공용 형
enum | Type { Void, Bool, Int, UInt, Double, …, UnknownType } |
enum | TypeFlag { NeedsConstruction, NeedsCopyConstruction, NeedsMoveConstruction, NeedsDestruction, RelocatableType, …, IsConst } |
flags | TypeFlags |
공용 함수
(since 6.0) | QMetaType() |
QMetaType(int typeId) | |
(since 6.0) qsizetype | alignOf() const |
(since 6.0) QPartialOrdering | compare(const void *lhs, const void *rhs) const |
void * | construct(void *where, const void *copy = nullptr) const |
void * | create(const void *copy = nullptr) const |
bool | debugStream(QDebug &dbg, const void *rhs) |
void | destroy(void *data) const |
void | destruct(void *data) const |
(since 6.0) bool | equals(const void *lhs, const void *rhs) const |
QMetaType::TypeFlags | flags() const |
(since 6.1) bool | hasRegisteredDataStreamOperators() const |
(since 6.0) bool | hasRegisteredDebugStreamOperator() const |
int | id() const |
(since 6.5) bool | isCopyConstructible() const |
(since 6.5) bool | isDefaultConstructible() const |
(since 6.5) bool | isDestructible() const |
bool | isEqualityComparable() const |
(since 6.5) bool | isMoveConstructible() const |
bool | isOrdered() const |
bool | isRegistered() const |
bool | isValid() const |
bool | load(QDataStream &stream, void *data) const |
const QMetaObject * | metaObject() const |
const char * | name() const |
(since 6.5) void | registerType() const |
bool | save(QDataStream &stream, const void *data) const |
qsizetype | sizeOf() const |
(since 6.6) QMetaType | underlyingType() const |
정적 공용 멤버
bool | canConvert(QMetaType fromType, QMetaType toType) |
bool | canView(QMetaType fromType, QMetaType toType) |
bool | convert(QMetaType fromType, const void *from, QMetaType toType, void *to) |
QMetaType | fromName(QByteArrayView typeName) |
QMetaType | fromType() |
bool | hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType) |
bool | hasRegisteredConverterFunction() |
bool | hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType) |
(since 6.0) bool | hasRegisteredMutableViewFunction() |
bool | isRegistered(int type) |
bool | registerConverter() |
bool | registerConverter(To (From::*)() const function) |
bool | registerConverter(To (From::*)(bool *) const function) |
bool | registerConverter(UnaryFunction function) |
(since 6.0) bool | registerMutableView(To (From::*)() function) |
(since 6.0) bool | registerMutableView(UnaryFunction function) |
(since 6.0) bool | view(QMetaType fromType, void *from, QMetaType toType, void *to) |
관련 비회원
(since 6.4) size_t | qHash(QMetaType key, size_t seed = 0) |
int | qMetaTypeId() |
int | qRegisterMetaType() |
(since 6.5) int | qRegisterMetaType(QMetaType meta) |
bool | operator!=(const QMetaType &lhs, const QMetaType &rhs) |
(since 6.5) QDebug | operator<<(QDebug d, QMetaType m) |
bool | operator==(const QMetaType &lhs, const QMetaType &rhs) |
매크로
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container) | |
Q_DECLARE_METATYPE(Type) | |
Q_DECLARE_OPAQUE_POINTER(PointerType) | |
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container) | |
Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer) |
상세 설명
이 클래스는 QVariant 및 큐에 대기 중인 신호와 슬롯 연결에서 유형을 마샬링하는 도우미로 사용됩니다. 런타임에 동적으로 생성 및 소멸할 수 있도록 유형 이름을 유형에 연결합니다.
유형 이름은 qRegisterMetaType() 또는 registerType()을 사용하여 QMetaType에 등록할 수 있습니다. 대부분의 연산에는 등록이 필요하지 않으며, 문자열 형식의 타입 이름을 QMetaType 객체 또는 타입의 ID로 다시 확인하려는 연산에만 등록이 필요합니다. 여기에는 QObject::connect()를 사용하는 일부 구식 신호 슬롯 연결, QDataStream 에서 QVariant 로 사용자 유형을 읽거나 QML, D-Bus, JavaScript 등과 같은 다른 언어 및 IPC 메커니즘에 바인딩하는 작업이 포함됩니다.
다음 코드는 MyClass
인스턴스를 이름으로 할당하고 소멸시키는데, 이를 위해서는 MyClass
이 이전에 등록되어 있어야 합니다:
QMetaType type = QMetaType::fromName("MyClass"); if (type.isValid()) { void *myClassPtr = type.create(); ... type.destroy(myClassPtr); myClassPtr = nullptr; }
스트림 연산자 operator<<()
와 operator>>()
가 사용자 정의 유형을 저장하는 QVariant 객체에서 작동하도록 하려면 사용자 정의 유형에 operator<<()
와 operator>>()
연산자를 제공해야 합니다.
Q_DECLARE_METATYPE(), QVariant::setValue(), QVariant::value() 및 QVariant::fromValue()도 참조하세요 .
멤버 타입 문서
enum QMetaType::Type
다음은 QMetaType 에서 지원하는 기본 제공 유형입니다:
상수 | 값 | 설명 |
---|---|---|
QMetaType::Void | 43 | void |
QMetaType::Bool | 1 | bool |
QMetaType::Int | 2 | int |
QMetaType::UInt | 3 | unsigned int |
QMetaType::Double | 6 | double |
QMetaType::QChar | 7 | QChar |
QMetaType::QString | 10 | QString |
QMetaType::QByteArray | 12 | QByteArray |
QMetaType::Nullptr | 51 | std::nullptr_t |
QMetaType::VoidStar | 31 | void * |
QMetaType::Long | 32 | long |
QMetaType::LongLong | 4 | LongLong |
QMetaType::Short | 33 | short |
QMetaType::Char | 34 | char |
QMetaType::Char16 | 56 | char16_t |
QMetaType::Char32 | 57 | char32_t |
QMetaType::ULong | 35 | unsigned long |
QMetaType::ULongLong | 5 | ULongLong |
QMetaType::UShort | 36 | unsigned short |
QMetaType::SChar | 40 | signed char |
QMetaType::UChar | 37 | unsigned char |
QMetaType::Float | 38 | float |
QMetaType::Float16 | 63 | qfloat16 |
QMetaType::QObjectStar | 39 | QObject * |
QMetaType::QCursor | 0x100a | QCursor |
QMetaType::QDate | 14 | QDate |
QMetaType::QSize | 21 | QSize |
QMetaType::QTime | 15 | QTime |
QMetaType::QVariantList | 9 | QVariantList |
QMetaType::QPolygon | 0x1007 | QPolygon |
QMetaType::QPolygonF | 0x1016 | QPolygonF |
QMetaType::QColor | 0x1003 | QColor |
QMetaType::QColorSpace | 0x1017 | QColorSpace (Qt 5.15에 도입) |
QMetaType::QSizeF | 22 | QSizeF |
QMetaType::QRectF | 20 | QRectF |
QMetaType::QLine | 23 | QLine |
QMetaType::QTextLength | 0x100d | QTextLength |
QMetaType::QStringList | 11 | QStringList |
QMetaType::QVariantMap | 8 | QVariantMap |
QMetaType::QVariantHash | 28 | QVariantHash |
QMetaType::QVariantPair | 58 | QVariantPair |
QMetaType::QIcon | 0x1005 | QIcon |
QMetaType::QPen | 0x100c | QPen |
QMetaType::QLineF | 24 | QLineF |
QMetaType::QTextFormat | 0x100e | QTextFormat |
QMetaType::QRect | 19 | QRect |
QMetaType::QPoint | 25 | QPoint |
QMetaType::QUrl | 17 | QUrl |
QMetaType::QRegularExpression | 44 | QRegularExpression |
QMetaType::QDateTime | 16 | QDateTime |
QMetaType::QPointF | 26 | QPointF |
QMetaType::QPalette | 0x1004 | QPalette |
QMetaType::QFont | 0x1000 | QFont |
QMetaType::QBrush | 0x1002 | QBrush |
QMetaType::QRegion | 0x1008 | QRegion |
QMetaType::QBitArray | 13 | QBitArray |
QMetaType::QImage | 0x1006 | QImage |
QMetaType::QKeySequence | 0x100b | Q키 시퀀스 |
QMetaType::QSizePolicy | 0x2000 | QSizePolicy |
QMetaType::QPixmap | 0x1001 | QPixmap |
QMetaType::QLocale | 18 | QLocale |
QMetaType::QBitmap | 0x1009 | QBitmap |
QMetaType::QTransform | 0x1010 | QTransform |
QMetaType::QMatrix4x4 | 0x1011 | QMatrix4x4 |
QMetaType::QVector2D | 0x1012 | QVector2D |
QMetaType::QVector3D | 0x1013 | QVector3D |
QMetaType::QVector4D | 0x1014 | QVector4D |
QMetaType::QQuaternion | 0x1015 | Q쿼터니언 |
QMetaType::QEasingCurve | 29 | QEasingCurve |
QMetaType::QJsonValue | 45 | QJsonValue |
QMetaType::QJsonObject | 46 | QJsonObject |
QMetaType::QJsonArray | 47 | QJsonArray |
QMetaType::QJsonDocument | 48 | QJsonDocument |
QMetaType::QCborValue | 53 | QCborValue |
QMetaType::QCborArray | 54 | QCborArray |
QMetaType::QCborMap | 55 | QCborMap |
QMetaType::QCborSimpleType | 52 | QCborSimpleType |
QMetaType::QModelIndex | 42 | QModelIndex |
QMetaType::QPersistentModelIndex | 50 | Q퍼시스턴트 모델 인덱스 (Qt 5.5에 도입) |
QMetaType::QUuid | 30 | QUuid |
QMetaType::QByteArrayList | 49 | QByteArrayList |
QMetaType::QVariant | 41 | QVariant |
QMetaType::User | 65536 | 사용자 유형에 대한 기본값 |
QMetaType::UnknownType | 0 | 유효하지 않은 타입 ID입니다. 등록되지 않은 유형의 경우 QMetaType 에서 반환됩니다. |
qRegisterMetaType() 또는 registerType()을 호출하여 추가 유형을 등록할 수 있습니다.
열거형 QMetaType::TypeFlag
플래그 QMetaType::TypeFlags
이 열거형은 QMetaType 에서 지원하는 유형의 속성을 설명합니다.
Constant | 값 | 설명 |
---|---|---|
QMetaType::NeedsConstruction | 0x1 | 이 유형에는 기본 생성자가 있습니다. 플래그가 설정되지 않은 경우 인스턴스는 memset을 0으로 설정하여 안전하게 초기화할 수 있습니다. |
QMetaType::NeedsCopyConstruction | 0x4000 | (6.5 이후) 이 유형에는 사소한 복사 생성자가 있습니다. 플래그가 설정되지 않으면, 인스턴스는 memcpy로 복사할 수 있습니다. |
QMetaType::NeedsMoveConstruction | 0x8000 | (6.5부터) 이 형에는 사소하지 않은 이동 생성자가 있습니다. 플래그가 설정되지 않으면, 인스턴스를 memcpy로 이동할 수 있습니다. |
QMetaType::NeedsDestruction | 0x2 | 이 형에는 사소하지 않은 소멸자가 있습니다. 플래그가 설정되지 않으면 객체를 삭제하기 전에 소멸자를 호출할 필요가 없습니다. |
QMetaType::RelocatableType | 0x4 | 이 속성을 가진 타입의 인스턴스는 memcpy를 사용하여 다른 메모리 위치로 안전하게 이동할 수 있습니다. |
QMetaType::IsEnumeration | 0x10 | 이 유형은 열거형입니다. |
QMetaType::IsUnsignedEnumeration | 0x100 | 유형이 열거형인 경우 기본 유형은 부호가 없습니다. |
QMetaType::PointerToQObject | 0x8 | 이 유형은 QObject 에서 파생된 클래스에 대한 포인터입니다. |
QMetaType::IsPointer | 0x800 | 이 유형은 다른 유형에 대한 포인터입니다. |
QMetaType::IsConst | 0x2000 | 이 타입의 값이 불변임을 나타냅니다(예: 생성 객체에 대한 포인터이기 때문). |
참고: Qt 6.5 이전에는, 복사 생성자나 소멸자가 사소한 것이 아닌 경우 (즉, 형이 사소한 것이 아닌 경우) NeedsConstruction과 NeedsDestruction 플래그가 모두 잘못 설정되었습니다.
Needs 플래그가 설정되어 있지만 메타 유형에 해당 유형의 공개 액세스 가능한 생성자나 공개 액세스 가능한 소멸자가 없을 수도 있습니다.
TypeFlags 유형은 QFlags<TypeFlag>에 대한 typedef입니다. TypeFlag 값의 OR 조합을 저장합니다.
멤버 함수 문서
[constexpr noexcept, since 6.0]
QMetaType::QMetaType()
기본, 유효하지 않은 QMetaType 객체를 구축합니다.
이 함수는 Qt 6.0에 도입되었습니다.
[explicit]
QMetaType::QMetaType(int typeId)
typeId 유형에 대한 모든 정보를 포함하는 QMetaType 객체를 생성합니다.
[constexpr, since 6.0]
qsizetype QMetaType::alignOf() const
타입의 정렬을 바이트 단위로 반환합니다(즉, alignof(T), 여기서 T는 이 QMetaType 인스턴스가 생성된 실제 타입입니다).
이 함수는 일반적으로 construct()와 함께 사용하여 형이 사용하는 메모리의 저수준 관리를 수행합니다.
이 함수는 Qt 6.0에 도입되었습니다.
QMetaType::construct() 및 QMetaType::sizeOf()도 참조하십시오 .
[static]
bool QMetaType::canConvert(QMetaType fromType, QMetaType toType)
QMetaType::convert 이 fromType 에서 toType 로 변환할 수 있으면 true
을 반환합니다.
Qt에서 지원하는 변환은 다음과 같습니다:
기본 타입(int, float, bool 등) 간의 형 변환이 지원됩니다.
QObject 에서 파생된 타입의 포인터 간 변환도 fromType 에서 설명하는 타입에서 toType 에서 설명하는 타입으로 qobject_cast 이 성공할 경우 이 함수에 대해 참을 반환합니다.
순차 컨테이너로부터의 형 변환도 toType 이 QVariantList 인 경우 이 함수에 대해 참을 반환합니다.
마찬가지로 연관 컨테이너로부터의 형변환은 toType 이 QVariantHash 또는 QVariantMap 인 경우에도 이 함수에 대해 참을 반환합니다.
convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()도 참조하세요 .
[static]
bool QMetaType::canView(QMetaType fromType, QMetaType toType)
QMetaType::view 이 fromType 유형에 toType 유형의 가변 뷰를 생성할 수 있으면 true
을 반환합니다.
QObject 에서 파생된 타입의 포인터 간 변환은 fromType 에서 설명하는 타입에서 toType 에서 설명하는 타입으로 qobject_cast 이 성공할 경우 이 함수에 대해 참을 반환합니다.
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()에 등록된 모든 컨테이너에서 QSequentialIterable 유형의 변경 가능한 보기를 만들 수 있습니다.
마찬가지로 Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()에 등록된 모든 컨테이너에 QAssociativeIterable 유형의 변경 가능한 보기를 만들 수 있습니다.
convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()도 참조하세요 .
[since 6.0]
QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const
lhs 및 rhs 의 객체를 비교하여 순서를 지정합니다.
비교가 지원되지 않거나 값이 정렬되지 않은 경우 QPartialOrdering::Unordered 를 반환합니다. 그렇지 않으면 lhs 이 rhs 보다 작거나 같거나 크면 각각 QPartialOrdering::Less, QPartialOrdering::Equivalent 또는 QPartialOrdering::Greater 을 반환합니다.
두 객체 모두 이 메타타입에 설명된 유형이어야 합니다. lhs 또는 rhs 이 nullptr
인 경우 값은 순서가 지정되지 않습니다. 비교는 메타타입 선언에 타입의 보다 작음 연산자가 표시된 경우에만 지원됩니다.
타입의 같음 연산자도 표시된 경우, 같음 연산자가 같다고 표시된 경우에만 값이 동일하게 비교됩니다. 같음 연산자가 없는 경우, 두 값이 모두 다른 값보다 작지 않으면 값이 같은 것으로 간주되며, 같음 연산자도 사용할 수 있고 두 값이 같지 않으면 부동 소수점 타입의 NaN(숫자가 아닌) 값이 순서를 벗어나는 것과 마찬가지로 순서가 없는 것으로 간주됩니다.
참고: 메타타입 선언에 보다 연산자가 보이지 않는 경우, 선언에 보이는 등호 연산자가 두 값을 같다고 간주하더라도 값이 정렬되지 않습니다: compare() == 0
는 보다 연산자가 보이는 경우에만 equals()와 일치합니다.
이 함수는 Qt 6.0에 도입되었습니다.
equals() 및 isOrdered()도 참조하십시오 .
void *QMetaType::construct(void *where, const void *copy = nullptr) const
where 으로 주소가 지정된 기존 메모리에 이 QMetaType 인스턴스가 생성된 유형의 값, 즉 copy 의 복사본을 생성하고 where 을 반환합니다. copy 이 0이면 기본값이 생성됩니다.
이 함수는 유형을 저장하는 데 사용되는 메모리를 명시적으로 관리하기 위한 저수준 함수입니다. 이 수준의 제어가 필요하지 않은 경우 create()를 호출하는 것이 좋습니다(즉, "배치 새로 만들기" 대신 "새로 만들기"를 사용).
where 이 새 값을 저장할 수 있는 위치를 가리키고 where 이 적절하게 정렬되어 있는지 확인해야 합니다. 타입의 크기는 sizeOf()를 호출하여 쿼리할 수 있습니다.
정렬에 대한 경험 법칙은 정렬이 플랫폼에 유용한 최대 정렬보다 크지 않는 한 유형보다 큰 2의 가장 작은 거듭제곱인 자연 경계에 유형을 정렬하는 것입니다. 실제로 2 * sizeof(void*)보다 큰 정렬은 특수한 하드웨어 명령어(예: x86에서 정렬된 SSE 로드 및 저장)에만 필요합니다.
[static]
bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, void *to)
from 의 객체를 fromType 에서 미리 할당된 공간 to 에 입력한 toType 으로 변환합니다. 변환에 성공하면 true
를 반환하고, 그렇지 않으면 false를 반환합니다.
from 및 to 모두 유효한 포인터여야 합니다.
void *QMetaType::create(const void *copy = nullptr) const
QMetaType 인스턴스가 생성된 유형이라고 가정하여 copy 의 복사본을 반환합니다. copy 이 nullptr
인 경우 기본적으로 구성된 인스턴스를 생성합니다.
QMetaType::destroy()도 참조하세요 .
bool QMetaType::debugStream(QDebug &dbg, const void *rhs)
rhs 의 객체를 디버그 스트림 dbg 으로 스트리밍합니다. 성공하면 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
void QMetaType::destroy(void *data) const
QMetaType 인스턴스가 생성된 유형이라고 가정하여 data 을 삭제합니다.
QMetaType::create()도 참조하세요 .
void QMetaType::destruct(void *data) const
QMetaType 인스턴스가 생성된 유형이라고 가정하여 data 에 있는 값을 파괴합니다.
destroy()와 달리 이 함수는 타입의 소멸자만 호출하고 삭제 연산자는 호출하지 않습니다.
QMetaType::construct()도 참조하세요 .
[since 6.0]
bool QMetaType::equals(const void *lhs, const void *rhs) const
lhs 와 rhs 의 객체가 동일한지 비교합니다.
두 객체 모두 이 메타타입에서 설명하는 유형이어야 합니다. 메타타입 선언에 해당 타입에 대한 같음 연산자 또는 같음 연산자가 표시된 경우에만 두 객체를 비교할 수 있습니다. 그렇지 않으면 메타타입은 값을 같다고 간주하지 않습니다. 메타타입 선언에 같음 연산자가 표시된 경우, 이 연산자는 권한이 있으며, 그렇지 않고 같음이 표시된 경우, 어느 값도 다른 값보다 작지 않으면 두 값이 동일한 것으로 간주됩니다. 값이 정렬되지 않은 경우(자세한 내용은 compare() 참조) 둘은 같지 않습니다.
두 객체가 같으면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
이 함수는 Qt 6.0에 도입되었습니다.
isEqualityComparable() 및 compare()도 참조하세요 .
[constexpr]
QMetaType::TypeFlags QMetaType::flags() const
이 QMetaType 인스턴스가 생성된 타입의 플래그를 반환합니다. 특정 유형 특성을 검사하려면 플래그를 직접 사용하는 것보다 "is-" 함수 중 하나를 사용하는 것이 좋습니다.
QMetaType::TypeFlags, QMetaType::flags(), isDefaultConstructible(), isCopyConstructible(), isMoveConstructible(), isDestructible(), isEqualityComparable(), isOrdered()도 참조하세요 .
[static]
QMetaType QMetaType::fromName(QByteArrayView typeName)
typeName 과 일치하는 QMetaType 을 반환합니다. 반환된 객체는 타입 이름을 알 수 없는 경우 유효하지 않습니다. QMetaType
[static constexpr]
template <typename T> QMetaType QMetaType::fromType()
템플릿 매개변수의 유형에 해당하는 QMetaType 을 반환합니다.
[static]
bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)
메타 타입 시스템에 메타 타입 ID fromType 에서 다음과 같이 등록된 변환이 있는 경우 true
을 반환합니다. toType
[static]
template <typename From, typename To> bool QMetaType::hasRegisteredConverterFunction()
메타 유형 시스템에 From 유형에서 To 유형으로의 변환이 등록된 경우 true
을 반환합니다.
이 함수는 오버로드된 함수입니다.
[since 6.1]
bool QMetaType::hasRegisteredDataStreamOperators() const
메타 타입 시스템에 이 메타 타입에 대한 데이터 스트림 연산자가 등록된 경우 true
를 반환합니다.
이 함수는 Qt 6.1에 도입되었습니다.
[since 6.0]
bool QMetaType::hasRegisteredDebugStreamOperator() const
메타 타입 시스템에 이 메타 타입에 대해 등록된 디버그 스트림 연산자가 있는 경우 true
를 반환합니다.
이 함수는 Qt 6.0에 도입되었습니다.
[static]
bool QMetaType::hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)
메타 타입 시스템에 메타 타입 아이디 fromType 의 메타 타입 아이디 toType 에 등록된 변경 가능한 뷰가 있는 경우 true
를 반환합니다.
[static, since 6.0]
template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()
메타 유형 시스템에 From 유형의 To 유형에 등록된 변경 가능한 보기가 있는 경우 true
를 반환합니다.
이것은 오버로드된 함수입니다.
이 함수는 Qt 6.0에 도입되었습니다.
int QMetaType::id() const
이 Q메타타입 인스턴스가 보유한 ID 유형을 반환합니다.
[noexcept, since 6.5]
bool QMetaType::isCopyConstructible() const
이 유형을 복사하여 구성할 수 있으면 true를 반환합니다. 가능한 경우, construct() 및 create()은 null이 아닌 copy
매개 변수와 함께 사용할 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
flags(), isDefaultConstructible(), isMoveConstructible() 및 isDestructible()도 참조하십시오 .
[noexcept, since 6.5]
bool QMetaType::isDefaultConstructible() const
이 유형을 기본 구성할 수 있으면 참을 반환합니다. 가능한 경우, construct() 및 create()은 null인 copy
매개 변수와 함께 사용할 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
flags(), isCopyConstructible(), isMoveConstructible() 및 isDestructible()도 참조하십시오 .
[noexcept, since 6.5]
bool QMetaType::isDestructible() const
이 유형을 파괴할 수 있으면 참을 반환합니다. 가능하면 destroy() 및 destruct()를 호출할 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
flags(), isDefaultConstructible(), isCopyConstructible() 및 isMoveConstructible()도 참조하십시오 .
bool QMetaType::isEqualityComparable() const
메타타입 선언에 이 메타타입으로 설명된 타입에 대한 같음 연산자가 표시되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
equals() 및 isOrdered()도 참조하세요 .
[noexcept, since 6.5]
bool QMetaType::isMoveConstructible() const
이 타입을 이동 구성할 수 있으면 true를 반환합니다. QMetaType 에는 현재 이 특성을 활용하는 API가 없습니다.
이 함수는 Qt 6.5에 도입되었습니다.
flags(), isDefaultConstructible(), isCopyConstructible() 및 isDestructible()도 참조하세요 .
bool QMetaType::isOrdered() const
메타타입 선언에 이 메타타입으로 설명된 타입에 대한 연산자보다 작은 연산자가 표시되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
compare() 및 isEqualityComparable()도 참조하세요 .
bool QMetaType::isRegistered() const
이 QMetaType 객체가 Qt 전역 메타형 레지스트리에 등록되어 있으면 true
을 반환합니다. 등록하면 이름( QMetaType::fromName() 사용) 또는 ID(생성자 사용)로 형을 찾을 수 있습니다.
qRegisterMetaType() 및 isValid()도 참조하십시오 .
[static]
bool QMetaType::isRegistered(int type)
ID가 type 인 데이터 타입이 등록되어 있으면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
type(), typeName() 및 Type 를참조하십시오 .
bool QMetaType::isValid() const
이 QMetaType 객체에 유형에 대한 유효한 정보가 포함되어 있으면 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
isRegistered()도 참조하세요 .
bool QMetaType::load(QDataStream &stream, void *data) const
주어진 stream 에서 data 으로 이 타입의 객체를 읽습니다. 객체가 성공적으로 로드되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
일반적으로 이 함수를 직접 호출할 필요는 없습니다. 대신 load()에 의존하는 QVariant 의 operator>>()
을 사용하여 사용자 정의 유형을 스트리밍하세요.
save()도 참조하세요 .
[constexpr]
const QMetaObject *QMetaType::metaObject() const
이 타입에 상대적인 QMetaObject 을 반환합니다.
유형이 QObject 의 하위 클래스에 대한 포인터 유형인 경우 flags() 에는 QMetaType::PointerToQObject 이 포함되며 이 함수는 해당 QMetaObject 을 반환합니다. 이 함수는 QMetaObject::newInstance()와 함께 사용하여 이 유형의 QObject를 만들 수 있습니다.
유형이 Q_GADGET 인 경우 flags() 에는 QMetaType::IsGadget 이 포함됩니다. 유형이 Q_GADGET 에 대한 포인터인 경우 flags() 에는 QMetaType::PointerToGadget 이 포함됩니다. 두 경우 모두 이 함수는 QMetaObject 을 반환합니다. 예를 들어 QVariant::data()에 주어진 것처럼 QMetaMethod 및 QMetaProperty 을 검색하여 이 타입의 포인터에 사용할 수 있습니다.
유형이 열거형인 경우 flags()에는 QMetaType::IsEnumeration 이 포함됩니다. 이 경우 이 함수는 열거형이 Q_ENUM 또는 nullptr
로 등록되어 있는 경우 둘러싸는 객체의 QMetaObject 를 반환합니다.
QMetaType::flags()도 참조하세요 .
[constexpr]
const char *QMetaType::name() const
이 QMetaType 과 연관된 유형 이름을 반환하거나 일치하는 유형을 찾을 수 없는 경우 널 포인터를 반환합니다. 반환된 포인터는 삭제해서는 안 됩니다.
typeName()도 참조하세요 .
[static]
template <typename From, typename To> bool QMetaType::registerConverter()
메타 타입 시스템에서 From 타입에서 To 타입으로의 암시적 변환 가능성을 등록합니다. 등록에 성공하면 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
class Counter { int number = 0; public: int value() const { return number; } operator int() const { return value(); } void increment() {++number;} }; QMetaType::registerConverter<Counter, int>();
[static]
template <typename From, typename To> bool QMetaType::registerConverter(To (From::*)() const function)
이것은 오버로드된 함수입니다.
메타 타입 시스템에서 From 타입에서 To 타입으로 변환하는 To From::function() const와 같은 function 메서드를 등록합니다. 등록에 성공하면 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
struct Coordinates { int x; int y; int z; QString toString() const { return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x), QString::number(y), QString::number(z)); } }; QMetaType::registerConverter<Coordinates, QString>(&Coordinates::toString);
[static]
template <typename From, typename To> bool QMetaType::registerConverter(To (From::*)(bool *) const function)
이것은 오버로드된 함수입니다.
메타 타입 시스템에서 From 타입에서 To 타입으로 변환하는 To From::function(bool *ok) const와 같은 function 메서드를 메타 타입 시스템에 등록합니다. 등록에 성공하면 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
ok
포인터는 함수에서 변환 성공 여부를 나타내는 데 사용할 수 있습니다.
struct BigNumber { long long l; int toInt(bool *ok = nullptr) const { const bool canConvertSafely = l < std::numeric_limits<int>::max(); if (ok) *ok = canConvertSafely; return l; } }; QMetaType::registerConverter<BigNumber, int>(&BigNumber::toInt);
[static]
template <typename From, typename To, typename UnaryFunction> bool QMetaType::registerConverter(UnaryFunction function)
이것은 오버로드된 함수입니다.
메타 타입 시스템에서 단항 함수 객체 function 를 From 타입에서 To 타입으로의 변환기로 등록합니다. 등록에 성공하면 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
function 는 From
타입의 인스턴스를 받아 To
의 인스턴스를 반환해야 합니다. 함수 포인터, 람다 또는 함수 객체일 수 있습니다. Qt 6.5부터 function 는 std::optional<To>
의 인스턴스를 반환하여 실패한 변환을 나타낼 수도 있습니다.
QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) { return QString::fromUtf8(str.data()); }); QMetaType::registerConverter<QJsonValue, QPointF>( [](const QJsonValue &value) -> std::optional<QPointF> { const auto object = value.toObject(); if (!object.contains("x") || !object.contains("y")) return std::nullopt; // The conversion fails if the required properties are missing return QPointF{object["x"].toDouble(), object["y"].toDouble()}; });
[static, since 6.0]
template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*)() function)
이것은 오버로드된 함수입니다.
메타 타입 시스템의 From
타입에 To
타입의 변경 가능한 보기로 To From::function()
같은 메서드 function 를 등록합니다. 등록에 성공하면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
이 함수는 Qt 6.0에 도입되었습니다.
[static, since 6.0]
template <typename From, typename To, typename UnaryFunction> bool QMetaType::registerMutableView(UnaryFunction function)
이것은 오버로드된 함수입니다.
단항 함수 객체 function 를 메타 타입 시스템의 From 타입에 To 타입의 변경 가능한 보기로 등록합니다. 등록에 성공하면 true
를 반환하고, 그렇지 않으면 false
을 반환합니다.
이 함수는 Qt 6.0에 도입되었습니다.
[since 6.5]
void QMetaType::registerType() const
QMetaType::fromName()을 사용하여 이름으로 찾을 수 있도록 QMetaType 을 유형 레지스트리에 등록합니다.
이 함수는 Qt 6.5에 도입되었습니다.
qRegisterMetaType()도 참조하십시오 .
bool QMetaType::save(QDataStream &stream, const void *data) const
data 이 가리키는 객체를 주어진 stream 에 씁니다. 객체가 성공적으로 저장되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
일반적으로 이 함수를 직접 호출할 필요는 없습니다. 대신 save()에 의존하는 QVariant 의 operator<<()
을 사용하여 사용자 정의 유형을 스트리밍하세요.
load()도 참조하세요 .
[constexpr]
qsizetype QMetaType::sizeOf() const
타입의 크기를 바이트 단위로 반환합니다(즉, sizeof(T), 여기서 T는 이 QMetaType 인스턴스가 생성된 실제 타입).
이 함수는 일반적으로 construct()와 함께 사용하여 타입이 사용하는 메모리의 저수준 관리를 수행합니다.
QMetaType::construct(), QMetaType::sizeOf() 및 QMetaType::alignOf()도 참조하세요 .
[since 6.6]
QMetaType QMetaType::underlyingType() const
이 메타형이 열거형을 나타내는 경우, 이 메서드는 열거형 기본 형과 동일한 부호 및 크기의 숫자 클래스의 메타형을 반환합니다. QFlags 타입을 나타내는 경우 QMetaType::Int 을 반환합니다. 다른 모든 경우에는 유효하지 않은 QMetaType 이 반환됩니다.
이 함수는 Qt 6.6에 도입되었습니다.
[static, since 6.0]
bool QMetaType::view(QMetaType fromType, void *from, QMetaType toType, void *to)
from to toType 에 미리 할당된 공간에 의 에 있는 객체에 대해 변경 가능한 보기를 생성합니다. 변환에 성공하면 을 반환하고, 그렇지 않으면 거짓을 반환합니다. fromType true
이 함수는 Qt 6.0에 도입되었습니다.
관련 비회원
[since 6.4]
size_t qHash(QMetaType key, size_t seed = 0)
seed 을 사용하여 key 의 해시값을 반환합니다.
이 함수는 Qt 6.4에 도입되었습니다.
[constexpr]
template <typename T> int qMetaTypeId()
컴파일 시 T
타입의 메타 타입 ID를 반환합니다. 타입이 Q_DECLARE_METATYPE()로 선언되지 않은 경우 컴파일에 실패합니다.
일반적인 사용법:
int id = qMetaTypeId<QString>(); // id is now QMetaType::QString id = qMetaTypeId<MyStruct>(); // compile error if MyStruct not declared
QMetaType::type()은 qMetaTypeId()와 동일한 ID를 반환하지만, 런타임에 유형 이름을 기반으로 조회를 수행합니다. QMetaType::type()은 약간 느리지만 유형이 등록되지 않은 경우 컴파일에 성공합니다.
Q_DECLARE_METATYPE() 및 QMetaType::type()도 참조하세요 .
[constexpr]
template <typename T> int qRegisterMetaType()
이 함수를 호출하여 타입을 등록합니다 T
. 메타 타입 Id를 반환합니다.
예시:
int id = qRegisterMetaType<MyStruct>();
이 함수를 사용하려면 함수가 호출되는 지점에서 T
가 완전히 정의된 유형이어야 합니다. 포인터 타입의 경우 가리키는 타입도 완전히 정의되어 있어야 합니다. Q_DECLARE_OPAQUE_POINTER ()를 사용하여 포워드 선언된 타입에 대한 포인터를 등록할 수 있습니다.
QMetaType, QVariant, 또는 QObject::property() API에서 T
유형을 사용하려면 등록이 필요하지 않습니다.
대기 중인 신호 및 슬롯 연결에서 T
유형을 사용하려면 첫 번째 연결이 설정되기 전에 qRegisterMetaType<T>()
을 호출해야 합니다. 이는 일반적으로 T
를 사용하는 클래스의 생성자 또는 main()
함수에서 수행됩니다.
유형이 등록된 후에는 QMetaType::fromName()를 사용하여 해당 이름으로 찾을 수 있습니다.
Q_DECLARE_METATYPE()도 참조하세요 .
[since 6.5]
int qRegisterMetaType(QMetaType meta)
메타 유형 meta 을 등록하고 해당 유형 Id를 반환합니다.
이 함수를 사용하려면 함수가 호출되는 지점에서 T
유형이 완전히 정의되어 있어야 합니다. 포인터 타입의 경우 가리키는 타입도 완전히 정의되어 있어야 합니다. Q_DECLARE_OPAQUE_POINTER ()를 사용하여 포워드 선언된 유형에 대한 포인터를 등록할 수 있습니다.
QMetaType, QVariant, 또는 QObject::property() API에서 T
유형을 사용하려면 등록이 필요하지 않습니다.
대기 중인 신호 및 슬롯 연결에서 T
유형을 사용하려면 첫 번째 연결이 설정되기 전에 qRegisterMetaType<T>()
을 호출해야 합니다. 이는 일반적으로 T
를 사용하는 클래스의 생성자 또는 main()
함수에서 수행됩니다.
형이 등록된 후에는 QMetaType::fromName()를 사용하여 이름으로 찾을 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
[noexcept]
bool operator!=(const QMetaType &lhs, const QMetaType &rhs)
이 함수는 오버로드된 함수입니다.
QMetaType lhs 이 QMetaType rhs 과 다른 유형을 나타내는 경우 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
[since 6.5]
QDebug operator<<(QDebug d, QMetaType m)
QMetaType m 을 d 스트림에 쓰고 스트림을 반환합니다.
이 함수는 Qt 6.5에 도입되었습니다.
[noexcept]
bool operator==(const QMetaType &lhs, const QMetaType &rhs)
이 함수는 오버로드된 함수입니다.
QMetaType lhs 이 QMetaType rhs 과 같은 유형이면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
매크로 문서
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)
이 매크로는 Container 컨테이너를 QMetaType 에 연관 컨테이너로 알려줍니다. 이렇게 하면 T와 U가 QMetaType 에 알려진 경우 Container<T, U>의 인스턴스를 QVariant 에 넣을 수 있습니다.
모든 Qt 연관 컨테이너에는 이미 내장된 지원이 있으므로 이 매크로를 사용할 필요가 없습니다. std::map 컨테이너에도 내장 지원이 있습니다.
이 예는 Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()의 일반적인 사용법을 보여줍니다:
#include <unordered_list> Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map) void someFunc() { std::unordered_map<int, bool> container; QVariant var = QVariant::fromValue(container); // ... }
Q_DECLARE_METATYPE(Type)
이 매크로는 공개 기본 생성자, 공개 복사 생성자 및 공개 소멸자를 제공하는 한 Type 형식을 QMetaType 에 알려줍니다. QVariant 에서 Type 유형을 사용자 정의 유형으로 사용하려면 이 매크로가 필요합니다.
이 매크로를 사용하려면 Type 이 사용되는 지점에서 완전히 정의된 유형이어야 합니다. 포인터 타입의 경우 가리키는 타입도 완전히 정의되어 있어야 합니다. Q_DECLARE_OPAQUE_POINTER ()와 함께 사용하여 포워드 선언된 유형에 대한 포인터를 등록합니다.
이 매크로는 클래스 또는 구조체의 선언 아래에 배치하는 것이 가장 이상적입니다. 이것이 불가능하다면, 해당 유형이 QVariant 에 사용될 때마다 포함해야 하는 비공개 헤더 파일에 넣을 수 있습니다.
Q_DECLARE_METATYPE()을 추가하면 QVariant 을 포함한 모든 템플릿 기반 함수에 해당 유형이 알려집니다. 대기 중인 신호 및 슬롯 연결이나 QObject 의 속성 시스템에서 해당 유형을 사용하려는 경우, 이름이 런타임에 확인되므로 qRegisterMetaType()도 호출해야 합니다.
이 예는 Q_DECLARE_METATYPE()의 일반적인 사용 사례를 보여줍니다:
struct MyStruct { int i; ... }; Q_DECLARE_METATYPE(MyStruct)
MyStruct
이 네임스페이스에 있는 경우 Q_DECLARE_METATYPE() 매크로는 네임스페이스 외부에 있어야 합니다:
namespace MyNamespace { ... } Q_DECLARE_METATYPE(MyNamespace::MyStruct)
MyStruct
는 이제 QMetaType 에 알려졌으므로 QVariant 에서 사용할 수 있습니다:
MyStruct s; QVariant var; var.setValue(s); // copy s into the variant ... // retrieve the value MyStruct s2 = var.value<MyStruct>();
일부 유형은 자동으로 등록되므로 이 매크로가 필요하지 않습니다:
- 다음에서 파생된 클래스에 대한 포인터 QObject
- QList<T>, QQueue<T>, QStack<T> 또는 QSet<T>에서 파생된 클래스에 대한 포인터, 여기서 T는 등록된 메타 타입입니다.
- QHash<T1, T2>, QMap<T1, T2> 또는 std::pair<T1, T2>, 여기서 T1과 T2는 등록된 메타 형입니다.
- QPointer<T>, QSharedPointer<T>, QWeakPointer<T>, 여기서 T는 다음에서 파생되는 클래스입니다. QObject
- Q_ENUM 에 등록된 열거형 또는 Q_FLAG
- Q_GADGET 매크로가 있는 클래스
참고: 이 메서드는 등록 시점에 스트림 및 디버그 연산자가 표시되는 경우 해당 유형에 대한 스트림 및 디버그 연산자도 등록합니다. 이 작업은 일부에서는 자동으로 수행되므로 유형에 대한 스트림 연산자는 유형 자체 바로 뒤에 선언하는 것이 좋습니다. C++의 인수 종속 조회 규칙 때문에 연산자를 타입 자체와 동일한 네임스페이스에 선언하는 것도 강력히 권장됩니다.
스트림 연산자는 다음과 같은 서명을 가져야 합니다:
QDataStream &operator<<(QDataStream &out, const MyClass &myObj); QDataStream &operator>>(QDataStream &in, MyClass &myObj);
qRegisterMetaType()도 참조하세요 .
Q_DECLARE_OPAQUE_POINTER(PointerType)
이 매크로를 사용하면 Q_DECLARE_METATYPE() 또는 qRegisterMetaType()를 사용하여 QMetaType 에 포워드 선언된 유형(PointerType)에 대한 포인터를 등록할 수 있습니다.
Q_DECLARE_METATYPE() 및 qRegisterMetaType()도 참조하세요 .
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)
이 매크로는 Container 컨테이너를 QMetaType 에 순차 컨테이너로 알려줍니다. 이렇게 하면 T 자체가 QMetaType 에 알려진 경우 Container<T>의 인스턴스를 QVariant 에 넣을 수 있습니다.
모든 Qt 시퀀셜 컨테이너에는 이미 내장 지원이 있으므로 이 매크로를 사용할 필요가 없습니다. std::vector 및 std::list 컨테이너도 내장 지원이 있습니다.
이 예는 Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()의 일반적인 사용법을 보여줍니다:
#include <deque> Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(std::deque) void someFunc() { std::deque<QFile*> container; QVariant var = QVariant::fromValue(container); // ... }
Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)
이 매크로는 스마트 포인터 SmartPointer 를 QMetaType 에 스마트 포인터로 알려줍니다. 이렇게 하면 T가 QObject 을 상속하는 유형인 경우 SmartPointer<T>의 인스턴스를 QVariant 에 넣을 수 있습니다.
QWeakPointer, QSharedPointer 및 QPointer 에는 이미 내장된 지원이 있으므로 이 매크로를 함께 사용할 필요가 없습니다.
이 예는 Q_DECLARE_SMART_POINTER_METATYPE()의 일반적인 사용법을 보여줍니다:
#include <memory>Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)void someFunc() { auto smart_ptr = std::make_shared<QFile>(); QVariant var = QVariant::fromValue(smart_ptr); // ... if (var.canConvert<QObject*>()) { QObject *sp = var.value<QObject*>(); qDebug() << sp->metaObject()->className(); // Prints 'QFile'. } }
© 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.