이 페이지에서

QMetaType Class

QMetaType 클래스는 메타 객체 시스템에서 명명된 유형을 관리합니다. 더 보기...

헤더: #include <QMetaType>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

참고: 이 클래스의 모든 함수는 스레드 안전합니다.

QMetaType 비교

범주비교 가능한 유형
동등성QMetaType

공개 유형

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::*function)() const)
bool registerConverter(To (From::*function)(bool *) const)
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)

매크로

상세 설명

이 클래스는 ` 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::Void43void
QMetaType::Bool1bool
QMetaType::Int2int
QMetaType::UInt3unsigned int
QMetaType::Double6double
QMetaType::QChar7QChar
QMetaType::QString10QString
QMetaType::QByteArray12QByteArray
QMetaType::Nullptr51std::nullptr_t
QMetaType::VoidStar31void *
QMetaType::Long32long
QMetaType::LongLong4LongLong
QMetaType::Short33short
QMetaType::Char34char
QMetaType::Char1656char16_t
QMetaType::Char3257char32_t
QMetaType::ULong35unsigned long
QMetaType::ULongLong5ULongLong
QMetaType::UShort36unsigned short
QMetaType::SChar40signed char
QMetaType::UChar37unsigned char
QMetaType::Float38float
QMetaType::Float1663qfloat16
QMetaType::QObjectStar39QObject *
QMetaType::QBitArray13QBitArray
QMetaType::QBitmap0x1009QBitmap
QMetaType::QBrush0x1002QBrush
QMetaType::QByteArrayList49QByteArrayList
QMetaType::QCborArray54QCborArray
QMetaType::QCborMap55QCborMap
QMetaType::QCborSimpleType52QCborSimpleType
QMetaType::QCborValue53QCborValue
QMetaType::QColor0x1003QColor
QMetaType::QColorSpace0x1017QColorSpace (Qt 5.15에서 도입됨)
QMetaType::QCursor0x100aQCursor
QMetaType::QDate14QDate
QMetaType::QDateTime16QDateTime
QMetaType::QEasingCurve29QEasingCurve
QMetaType::QFont0x1000QFont
QMetaType::QIcon0x1005QIcon
QMetaType::QImage0x1006QImage
QMetaType::QJsonArray47QJsonArray
QMetaType::QJsonDocument48QJsonDocument
QMetaType::QJsonObject46QJsonObject
QMetaType::QJsonValue45QJsonValue
QMetaType::QKeySequence0x100bQKeySequence
QMetaType::QLine23QLine
QMetaType::QLineF24QLineF
QMetaType::QLocale18QLocale
QMetaType::QMatrix4x40x1011QMatrix4x4
QMetaType::QModelIndex42QModelIndex
QMetaType::QPalette0x1004QPalette
QMetaType::QPen0x100cQPen
QMetaType::QPersistentModelIndex50QPersistentModelIndex (Qt 5.5에서 도입됨)
QMetaType::QPixmap0x1001QPixmap
QMetaType::QPoint25QPoint
QMetaType::QPointF26QPointF
QMetaType::QPolygon0x1007QPolygon
QMetaType::QPolygonF0x1016QPolygonF
QMetaType::QQuaternion0x1015QQuaternion
QMetaType::QRect19QRect
QMetaType::QRectF20QRectF
QMetaType::QRegion0x1008QRegion
QMetaType::QRegularExpression44Q정규식
QMetaType::QSize21QSize
QMetaType::QSizeF22QSizeF
QMetaType::QSizePolicy0x2000QSizePolicy
QMetaType::QStringList11QStringList
QMetaType::QTextFormat0x100eQTextFormat
QMetaType::QTextLength0x100dQTextLength
QMetaType::QTime15QTime
QMetaType::QTransform0x1010QTransform
QMetaType::QUrl17QUrl
QMetaType::QUuid30QUuid
QMetaType::QVariant41QVariant
QMetaType::QVariantHash28QVariantHash
QMetaType::QVariantList9QVariantList
QMetaType::QVariantMap8QVariantMap
QMetaType::QVariantPair58QVariantPair
QMetaType::QVector2D0x1012QVector2D
QMetaType::QVector3D0x1013QVector3D
QMetaType::QVector4D0x1014QVector4D
QMetaType::User65536사용자 정의 유형의 기본 값
QMetaType::UnknownType0이 타입 ID는 유효하지 않습니다. 등록되지 않은 타입에 대해 QMetaType 에서 이 값이 반환됩니다.

qRegisterMetaType()을 사용하거나 registerType()를 호출하여 추가 타입을 등록할 수 있습니다.

type()도 참조하십시오 .

enum QMetaType::TypeFlag
flags QMetaType::TypeFlags

이 열거형은 QMetaType 에서 지원하는 유형의 속성을 설명합니다.

상수상수설명
QMetaType::NeedsConstruction0x1이 유형에는 기본 생성자가 있습니다. 이 플래그가 설정되지 않은 경우, 인스턴스를 memset을 사용하여 0으로 안전하게 초기화할 수 있습니다.
QMetaType::NeedsCopyConstruction (since Qt 6.5)0x4000이 유형은 비사소 복사 생성자를 가집니다. 이 플래그가 설정되지 않은 경우, memcpy를 사용하여 인스턴스를 복사할 수 있습니다.
QMetaType::NeedsMoveConstruction (since Qt 6.5)0x8000이 유형은 비사소 이동 생성자를 가집니다. 이 플래그가 설정되지 않은 경우, memcpy를 사용하여 인스턴스를 이동할 수 있습니다.
QMetaType::NeedsDestruction0x2이 유형에는 비사소 소멸자가 있습니다. 이 플래그가 설정되지 않은 경우, 객체를 폐기하기 전에 소멸자를 호출할 필요가 없습니다.
QMetaType::RelocatableType0x4이 속성을 가진 유형의 인스턴스는 memcpy를 사용하여 다른 메모리 위치로 안전하게 이동할 수 있습니다.
QMetaType::IsEnumeration0x10이 유형은 열거형입니다.
QMetaType::IsUnsignedEnumeration0x100이 유형이 열거형인 경우, 그 기본 유형은 부호 없는 유형입니다.
QMetaType::PointerToQObject0x8이 유형은 ` QObject`에서 파생된 클래스를 가리키는 포인터입니다.
QMetaType::IsPointer0x800이 유형은 다른 유형에 대한 포인터입니다.
QMetaType::IsConst0x2000이 유형의 값이 불변임을 나타냅니다(예: const 객체에 대한 포인터인 경우).

참고: Qt 6.5이전에는 복사 생성자나 소멸자 중 하나라도 비사소한 경우(즉, 유형이 사소하지 않은 경우) NeedsConstruction 및 NeedsDestruction 플래그가 모두 잘못 설정되었습니다.

Needs 플래그가 설정되어 있을 수 있지만, 메타 타입에는 관련 타입의 공개적으로 접근 가능한 생성자나 공개적으로 접근 가능한 소멸자가 없을 수 있습니다.

TypeFlags 유형은 QFlags<TypeFlag>에 대한 typedef입니다. 이 유형은 TypeFlag 값들의 OR 조합을 저장합니다.

멤버 함수 문서

[constexpr noexcept default, 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 를 반환합니다. 이는 주로 변환을 수행할 수 있는 능력에 관한 것이며, 실제 변환을 시도할 때 실패할 수도 있다는 점에 유의하십시오(예: 범위를 벗어난 부동 소수점 값을 정수로 변환하는 경우).

registerConverter() 함수는 내장형과 비내장형 사이, 또는 두 비내장형 간의 추가 변환을 등록하는 데 사용할 수 있습니다. 이 함수는 변환 경로가 등록되면 true 를 반환합니다.

Qt에서는 다음 변환을 지원합니다:

유형자동으로 변환되는 대상
QMetaType::BoolQMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QByteArrayQMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QCharQMetaType::Bool, QMetaType::Int, QMetaType::UInt, QMetaType::LongLong, QMetaType::ULongLong
QMetaType::QColorQMetaType::QString
QMetaType::QDateQMetaType::QDateTime, QMetaType::QString
QMetaType::QDateTimeQMetaType::QDate, QMetaType::QString, QMetaType::QTime
QMetaType::DoubleQMetaType::Bool, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QFontQMetaType::QString
QMetaType::IntQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QKeySequenceQMetaType::Int, QMetaType::QString
QMetaType::QVariantListQMetaType::QStringList (목록의 항목이 QString으로 변환될 수 있는 경우)
QMetaType::LongLongQMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QPointQMetaType::QPointF
QMetaType::QRectQMetaType::QRectF
QMetaType::QStringQMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QColor, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::QFont, QMetaType::Int, QMetaType::QKeySequence, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QStringListQMetaType::QVariantList, QMetaType::QString (목록에 항목이 정확히 하나만 포함된 경우)
QMetaType::QTimeQMetaType::QString
QMetaType::UIntQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::ULongLong
QMetaType::ULongLongQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt
QMetaType::QUuidQMetaType::QByteArray, QMetaType::QString

지원되는 다른 변환으로는 모든 기본 유형(int, float, bool 등, 모든 열거형 포함) 간의 변환과, 모든 포인터 유형과 std::nullptr_t 간의 변환이 있습니다. 열거형은 QString 및 QByteArray 로도 변환될 수 있습니다.

fromType 와 toType 가 모두 QObject 에서 파생된 유형(또는 해당 유형을 가리키는 포인터)인 경우, 두 유형 중 하나가 다른 하나에서 파생된 것이라면 이 함수는 true 를 반환합니다. 즉, fromType 로 표현된 유형에서 toType 로 표현된 유형으로의 static_cast<> 가 컴파일될 수 있다면 true를 반환합니다. convert() 함수는 qobject_cast()와 유사하게 작동하며, QVariant 가 가리키는 객체의 동적 유형을 검증합니다.

toType 가 QVariantList 인 경우, 순차 컨테이너에서 수행된 형 변환도 이 함수에 대해 true를 반환합니다.

마찬가지로, toType 이 QVariantHash 또는 QVariantMap 인 경우, 연관 컨테이너에서 캐스팅한 결과도 이 함수에 대해 true를 반환합니다.

convert(), QMetaSequence::Iterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QMetaAssociation::Iterable 및 Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()도 참조하십시오 .

[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)

QMetaType::view 가 fromType 타입에 대해 toType 타입의 변경 가능한 뷰를 생성할 수 있는 경우, 이 함수는 ` true `를 반환합니다.

QObject 에서 파생된 유형의 포인터 간 변환 시, fromType 로 설명된 유형에서 toType 로 설명된 유형으로의 qobject_cast 가 성공하면 이 함수는 true를 반환합니다.

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()에 등록된 모든 컨테이너에 대해 QMetaSequence::Iterable 유형의 변경 가능한 뷰를 생성할 수 있습니다.

마찬가지로 Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()에 등록된 모든 컨테이너에 대해 QMetaAssociation::Iterable 유형의 변경 가능한 뷰를 생성할 수 있습니다.

convert(), QMetaSequence::Iterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QMetaAssociation::Iterable 및 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 가 지정한 기존 메모리 영역(즉, copy 의 복사본)에 이 QMetaType 인스턴스가 생성될 때 지정된 타입의 값을 생성하고, where 를 반환합니다. copy 가 0인 경우, 값은 기본 생성됩니다.

이는 해당 타입을 저장하는 데 사용되는 메모리를 명시적으로 관리하기 위한 저수준 함수입니다. 이 정도의 제어가 필요하지 않은 경우 create()를 호출하는 것을 고려하십시오(즉, "placement new" 대신 "new"를 사용하십시오).

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

copy 의 복사본을 반환합니다. 단, 해당 객체가 이 QMetaType 인스턴스가 생성된 유형과 일치해야 합니다. copy 가 nullptr 인 경우, 기본 생성된 인스턴스를 생성합니다.

QMetaType::destroy()도 참조하십시오 .

bool QMetaType::debugStream(QDebug &dbg, const void *rhs)

rhs 에 있는 객체를 디버그 스트림 dbg 으로 스트리밍합니다. 성공 시 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

void QMetaType::destroy(void *data) const

data 를 파기합니다. 단, 해당 가 이 QMetaType 인스턴스가 생성된 용도에 맞는 유형이어야 합니다.

QMetaType::create()도 참조하십시오 .

void QMetaType::destruct(void *data) const

data 에 위치한 값을, 이 QMetaType 인스턴스가 생성된 유형에 속한다고 가정하고 소멸시킵니다.

destroy()와 달리, 이 함수는 해당 타입의 소멸자만 호출하며, delete 연산자는 호출하지 않습니다.

QMetaType::construct()도 참조하십시오 .

[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const

lhs 및 rhs 에 있는 객체들이 동일한지 비교합니다.

두 객체 모두 이 메타타입에 의해 정의된 유형이어야 합니다. 해당 유형에 대한 ‘보다 작음’ 또는 ‘동일함’ 연산자가 메타타입 선언에서 가시적인 경우에만 두 객체를 비교할 수 있습니다. 그렇지 않은 경우, 메타타입은 절대로 값을 동일하다고 간주하지 않습니다. 메타타입 선언에서 등호 연산자가 가시적인 경우, 해당 연산자가 기준이 됩니다. 그렇지 않은 경우, '보다 작음' 연산자가 가시적이고 두 값 중 어느 것도 다른 값보다 작지 않을 때, 두 값은 동일한 것으로 간주됩니다. 값들이 순서가 정해지지 않은 경우(자세한 내용은 compare() 참조), 두 값은 동일하지 않습니다.

두 객체가 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

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

isEqualityComparable() 및 compare()도 참조하십시오 .

[constexpr] QMetaType::TypeFlags QMetaType::flags() const

이 QMetaType 인스턴스가 생성된 유형의 플래그를 반환합니다. 특정 유형의 특성을 확인하려면 플래그를 직접 사용하는 것보다 “is-” 함수 중 하나를 사용하는 것이 좋습니다.

QMetaType::TypeFlags, isDefaultConstructible(), isCopyConstructible(), isMoveConstructible(), isDestructible(), isEqualityComparable() 및 isOrdered()도 참조하십시오 .

[static] QMetaType QMetaType::fromName(QByteArrayView typeName)

typeName 와 일치하는 ` QMetaType `를 반환합니다. `typeName`이 다음에서 인식되지 않는 경우, 반환된 객체는 유효하지 않습니다. QMetaType

[static constexpr] template <typename T> QMetaType QMetaType::fromType()

템플릿 매개변수의 유형에 해당하는 ` QMetaType `를 반환합니다.

[static] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)

true메타 타입 시스템에 메타 타입 ID fromType 에서 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)

메타 타입 시스템에 메타 타입 ID toType 에 대한 메타 타입 ID fromType 의 등록된 가변 뷰가 있는 경우, ` true`를 반환합니다.

[static, since 6.0] template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()

메타 타입 시스템에 To 타입에 대한 From 타입의 등록된 가변 뷰가 있는 경우, ` true`를 반환합니다.

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

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

int QMetaType::id() const

이 ` QMetaType ` 인스턴스가 보유한 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

이 유형이 기본 생성될 수 있는 경우 true를 반환합니다. 기본 생성될 수 있다면, ` construct()` 및 ` create()` 함수를 ` copy ` 매개변수가 null인 상태로 사용할 수 있습니다.

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

flags(), isCopyConstructible(), isMoveConstructible() 및 isDestructible()도 참조하십시오 .

[noexcept, since 6.5] bool QMetaType::isDestructible() const

이 타입을 소멸시킬 수 있으면 true를 반환합니다. 소멸시킬 수 있다면, ` 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

이 유형이 이동 생성(move-construct)될 수 있는 경우 true를 반환합니다. 현재 ` QMetaType `에는 이 트레이트를 활용할 수 있는 API가 없습니다.

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

flags(), isDefaultConstructible(), isCopyConstructible(), isDestructible()도 참조하십시오 .

bool QMetaType::isOrdered() const

이 메타타입이 설명하는 유형에 대한 ‘보다 작음’ 연산자가 메타타입 선언에서 가시적이었다면 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.

compare() 및 isEqualityComparable()도 참조하십시오 .

[noexcept] bool QMetaType::isRegistered() const

이 QMetaType 객체가 Qt 전역 메타타입 레지스트리에 등록된 경우 true 를 반환합니다. 등록을 통해 해당 타입은 이름( QMetaType::fromName())을 사용하거나 ID(생성자)를 사용하여 찾을 수 있습니다.

qRegisterMetaType() 및 isValid()도 참조하십시오 .

[static] bool QMetaType::isRegistered(int type)

ID가 type 인 데이터 유형이 등록되어 있으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

type() 및 Type도 참조하십시오 .

[constexpr noexcept] 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 를 반환합니다. 이를 사용하여 QMetaMethod 및 QMetaProperty 를 가져와, 예를 들어 QVariant::data()에서 제공되는 바와 같이 이 타입의 포인터에 적용할 수 있습니다.

타입이 열거형인 경우, flags()은 QMetaType::IsEnumeration 를 포함합니다. 이 경우, 해당 열거형이 Q_ENUM 로 등록된 경우 이 함수는 QMetaObject 를 반환하고, 그렇지 않은 경우 nullptr 를 반환합니다.

QMetaType::flags()도 참조하십시오 .

[constexpr] const char *QMetaType::name() const

이 QMetaType 에 연관된 유형 이름을 반환하거나, 일치하는 유형이 발견되지 않은 경우 null 포인터를 반환합니다. 반환된 포인터는 삭제해서는 안 됩니다.

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::*function)() const)

메타 타입 시스템에서 From 타입에서 To 타입으로의 변환기로서, ` function `와 같은 메서드(예: `To From::function() const`)를 등록합니다. 등록에 성공하면 ` 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::*function)(bool *) const)

메타 타입 시스템에서 From 타입에서 To 타입으로의 변환기로 ` function `와 같은 메서드(예: `To From::function(bool *ok) const`)를 등록합니다. 등록에 성공하면 ` 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 `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

function From 타입의 인스턴스를 인수로 받아 타입의 인스턴스를 반환해야 합니다. 함수 포인터, 람다 또는 펑터 객체일 수 있습니다. Qt 6.5부터는 가 변환 실패를 표시할 수 있도록 타입의 인스턴스를 반환할 수도 있습니다. To function std::optional<To>

QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) {
    return QString::fromUtf8(str.data());
});
QMetaType::registerConverter<QJsonValue, CustomPointType>(
          [](const QJsonValue &value) -> std::optional<CustomPointType> {
    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 CustomPointType{object["x"].toDouble(), object["y"].toDouble()};
});

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

[static, since 6.0] template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*function)())

메타 타입 시스템 내에서 From 타입에 대해 To 타입의 가변 뷰인 function (예: To From::function() ) 메서드를 등록합니다. 등록에 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

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

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

[static, since 6.0] template < typename From, typename To, typename UnaryFunction > bool QMetaType::registerMutableView(UnaryFunction function)

메타 타입 시스템에서 From 타입에 대한 To 타입의 가변 뷰로서 단항 함수 객체 function 를 등록합니다. 등록에 성공하면 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::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)

fromType to 에 위치한 타입의 사전 할당된 공간 내, 에 있는 객체에 대한 가변 뷰를 생성합니다. 변환이 성공하면 를 반환하고, 그렇지 않으면 false를 반환합니다. toType from 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를 반환합니다.

큐에 등록된 시그널 및 슬롯 연결에서 메타 타입 ` meta `을 사용하는 타입을 사용하려면, 첫 번째 연결이 설정되기 전에 ` qRegisterMetaType(meta) `을 호출해야 합니다. 이는 일반적으로 해당 메타 타입을 사용하는 클래스의 생성자나 ` 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_map>

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)

void someFunction()
{
    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
{
    struct MyStruct
    {
        //...
    };
}

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()을 사용하여, 선선언된 유형(PointerType)에 대한 포인터를 QMetaType 에 등록할 수 있게 해줍니다.

포인터가 가리키는 타입이 프로그램 내 다른 문맥에서 완전한 타입으로 사용되는 경우, moc에서 미완성 속성 타입에 대한 경고나 오류를 피하기 위해 이 매크로를 사용해서는 안 됩니다. 타입의 전체 정의가 제공되지만 컴파일 시간을 줄이기 위해 헤더에서 전방 선언을 선호하는 경우에는 대신 Q_MOC_INCLUDE 를 사용하십시오.

경고: Q_OBJECT 나 가젯 클래스를 가리키는 포인터에 Q_DECLARE_OPAQUE_POINTER를 사용하지마십시오 . 메타 타입 시스템에 일관성 없는 정보가 도입될 위험이 있습니다.

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 someMethod()
{
    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'.
    }
}

© 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.