QMetaObject Struct
QMetaObject 클래스는 Qt 객체에 대한 메타정보를 포함합니다. 더 보기...
| 헤더: | #include <QMetaObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
공개 타입
| class | Connection |
공개 함수
| QMetaClassInfo | classInfo(int index) const |
| int | classInfoCount() const |
| int | classInfoOffset() const |
| const char * | className() const |
| QMetaMethod | constructor(int index) const |
| int | constructorCount() const |
| QMetaEnum | enumerator(int index) const |
| int | enumeratorCount() const |
| int | enumeratorOffset() const |
| int | indexOfClassInfo(const char *name) const |
| int | indexOfConstructor(const char *constructor) const |
| int | indexOfEnumerator(const char *name) const |
| int | indexOfMethod(const char *method) const |
| int | indexOfProperty(const char *name) const |
| int | indexOfSignal(const char *signal) const |
| int | indexOfSlot(const char *slot) const |
| bool | inherits(const QMetaObject *metaObject) const |
(since 6.2) QMetaType | metaType() const |
| QMetaMethod | method(int index) const |
| int | methodCount() const |
| int | methodOffset() const |
(since 6.5) QObject * | newInstance(Args &&... arguments) const |
| QMetaProperty | property(int index) const |
| int | propertyCount() const |
| int | propertyOffset() const |
| const QMetaObject * | superClass() const |
| QMetaProperty | userProperty() const |
정적 공용 멤버
| bool | checkConnectArgs(const char *signal, const char *method) |
| bool | checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method) |
(since 6.10) QMetaObject::Connection | connect(const QObject *sender, const QMetaMethod &signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
(since 6.10) QMetaObject::Connection | connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| void | connectSlotsByName(QObject *object) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Args &&... arguments) |
| bool | invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Args &&... args) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&... arguments) |
| bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, Args &&... args) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args) |
| QByteArray | normalizedSignature(const char *method) |
| QByteArray | normalizedType(const char *type) |
매크로
| QMetaMethodArgument | Q_ARG(Type, const Type &value) |
| QMetaMethodReturnArgument | Q_RETURN_ARG(Type, Type &value) |
상세 설명
Qt의 Qt 메타 객체 시스템은 신호와 슬롯을 통한 객체 간 통신 메커니즘, 런타임 유형 정보 및 Qt 속성 시스템을 담당합니다. 애플리케이션에서 사용되는 각 ` QObject ` 하위 클래스에 대해 하나의 `QMetaObject` 인스턴스가 생성되며, 이 인스턴스는 ` QObject ` 하위 클래스에 대한 모든 메타 정보를 저장합니다. 이 객체는 ` QObject::metaObject()`를 통해 사용할 수 있습니다.
이 클래스는 일반적으로 애플리케이션 프로그래밍에 필수적인 것은 아니지만, 스크립팅 엔진이나 GUI 빌더와 같은 메타 애플리케이션을 작성할 때 유용합니다.
가장 유용하게 사용할 수 있는 함수는 다음과 같습니다:
- className()는 클래스의 이름을 반환합니다.
- superClass()는 슈퍼클래스의 메타 객체를 반환합니다.
- method() 및 methodCount()는 클래스의 메타 메서드(시그널, 슬롯 및 기타 invokable 멤버 함수)에 대한 정보를 제공합니다.
- enumerator() 및 enumeratorCount()은 클래스의 열거자에 대한 정보를 제공합니다.
- propertyCount() 및 property()는 클래스의 속성에 대한 정보를 제공합니다.
- constructor() 및 constructorCount()는 클래스의 메타 생성자에 대한 정보를 제공합니다.
인덱스 함수인 indexOfConstructor(), indexOfMethod(), indexOfEnumerator() 및 indexOfProperty()는 생성자, 멤버 함수, 열거자 또는 속성의 이름을 메타 객체 내의 인덱스에 매핑합니다. 예를 들어, Qt는 신호를 슬롯에 연결할 때 내부적으로 indexOfMethod()를 사용합니다.
클래스는 또한 QMetaClassInfo 객체에 저장된 추가 클래스 정보의이름-값 쌍 목록을 가질 수 있습니다. 쌍의 개수는 classInfoCount()가 반환하고, 개별 쌍은 classInfo()가 반환하며, indexOfClassInfo()를 사용하여 쌍을 검색할 수 있습니다.
참고: 메타 객체 시스템을 사용하는연산은 일반적으로 스레드 안전합니다. QMetaObject는 대개 컴파일 시점에 생성되는 정적 읽기 전용 인스턴스이기 때문입니다. 그러나 애플리케이션에 의해 메타 객체가 동적으로 수정되는 경우(예: QQmlPropertyMap 를 사용할 때), 애플리케이션은 해당 메타 객체에 대한 액세스를 명시적으로 동기화해야 합니다.
QMetaClassInfo, QMetaEnum, QMetaMethod, QMetaProperty, QMetaType 및 메타 객체 시스템도 참조하십시오 .
멤버 함수 문서
[static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)
signal 및 method 인자가 호환되는 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
signal 와 method 는 모두 정규화된 형태여야 합니다.
normalizedSignature()함수도 참조하십시오 .
[static] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)
signal 와 method 인자가 호환되는 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
이 함수는 오버로드된 함수입니다.
QMetaClassInfo QMetaObject::classInfo(int index) const
지정된 index 을 가진 클래스 정보 항목의 메타데이터를 반환합니다.
예시:
class MyClass : public QObject
{
Q_OBJECT
Q_CLASSINFO("author", "Sabrina Schweinsteiger")
Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")
public:
//...
};classInfoCount(), classInfoOffset(), indexOfClassInfo()도 참조하십시오 .
int QMetaObject::classInfoCount() const
이 클래스에 포함된 클래스 정보 항목의 개수를 반환합니다.
classInfo(), classInfoOffset() 및 indexOfClassInfo()도 참조하십시오 .
int QMetaObject::classInfoOffset() const
이 클래스의 클래스 정보 오프셋, 즉 이 클래스의 첫 번째 클래스 정보 항목의 인덱스 위치를 반환합니다.
클래스에 클래스 정보가 있는 상위 클래스가 없는 경우 오프셋은 0이며, 그렇지 않은 경우 오프셋은 해당 클래스의 상위 클래스에 포함된 모든 클래스 정보 항목의 합계입니다.
classInfo(), classInfoCount(), indexOfClassInfo()도 참조하십시오 .
const char *QMetaObject::className() const
클래스 이름을 반환합니다.
superClass()도 참조하십시오 .
[static, since 6.10] template <typename Functor> QMetaObject::Connection QMetaObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
sender 객체 내의 signal 에 있는 지정된 type 을 functor 에 연결하여 context 의 특정 이벤트 루프에 배치합니다. 나중에 연결을 해제하는 데 사용할 수 있는 연결 핸들을 반환합니다. 이는 메타 객체 인트로스펙션을 통해 가져온 신호를 지역 변수를 캡처하는 람다에 연결하는 데 유용할 수 있습니다.
참고: Qt ::UniqueConnections는 람다, 비멤버 함수 및 펑터에는 작동하지 않으며, 멤버 함수에만 적용됩니다.
슬롯 함수는 신호의 인자 수와 같거나 더 적은 인자를 갖는 임의의 함수나 펑크터일 수 있습니다. 해당 신호와 슬롯의 인수는 정확히 일치해야 하며, 이 함수는 암시적 변환이나 타입 검사를 처리하지 않습니다. 오버로드된 펑터는 ` qOverload`을 사용하여 명시적으로 해결해야 합니다. ` signal `은 신호의 메타 메서드여야 하며, 그렇지 않으면 유효하지 않은 연결이 반환됩니다.
발신자나 컨텍스트가 소멸되면 연결은 자동으로 해제됩니다. 그러나 신호가 발신될 때 펑터 내에서 사용되는 모든 객체가 여전히 존재하도록 주의해야 합니다.
이 함수는 QMetaObject::connect()를 오버로드합니다.
참고: 이 함수는 스레드 안전합니다.
이 함수는 Qt 6.10에서 도입되었습니다.
QObject::connect() 및 QObject::disconnect()도 참조하십시오 .
[static, since 6.10] template <typename PointerToMemberFunction> QMetaObject::Connection QMetaObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
sender 객체의 signal 에 있는 지정된 type 을 receiver 객체의 method 에 연결합니다. 나중에 연결을 해제하는 데 사용할 수 있는 연결 핸들을 반환합니다.
예를 들어 매개변수가 유효하지 않은 경우 등, 연결을 생성할 수 없으면 `Connection` 핸들은 무효가 됩니다. ` QMetaObject::Connection `을 `bool`로 형변환하여 유효한지 확인할 수 있습니다. 반환된 핸들을 ` QObject::disconnect()`에 전달하여 연결을 끊으십시오.
신호의 인자 개수가 슬롯의 인자 개수 이상일 경우, 슬롯을 해당 신호에 연결할 수 있습니다. 해당 신호와 슬롯의 인수는 정확히 일치해야 하며, 이 함수는 암시적 변환이나 유형 검사를 처리하지 않습니다. 오버로드된 슬롯은 qOverload 를 사용하여 명시적으로 해결해야 합니다. signal 는 신호의 메타 메서드여야 하며, 그렇지 않으면 유효하지 않은 연결이 반환됩니다.
이 함수는 ` QMetaObject::connect()`을 오버로드합니다.
참고: 이 함수는 스레드 안전합니다.
이 함수는 Qt 6.10에서 도입되었습니다.
QObject::connect() 및 QObject::disconnect()도 참조하십시오 .
[static] void QMetaObject::connectSlotsByName(QObject *object)
지정된 object 의 모든 자식 객체를 재귀적으로 검색하고, 이들 중 일치하는 신호를 다음 형식을 따르는 object 의 슬롯에 연결합니다:
void on_<object name>_<signal name>(<signal parameters>);우리 객체에 ` QPushButton ` 타입의 자식 객체가 있고, 해당 객체의 ` object name `이 ` button1`라고 가정해 봅시다. 버튼의 ` clicked() ` 신호를 수신할 슬롯은 다음과 같습니다:
void on_button1_clicked();object 자체에 올바르게 설정된 객체 이름이 있다면, 그 객체의 신호들도 각각의 슬롯에 연결됩니다.
QObject::setObjectName()도 참조하십시오 .
QMetaMethod QMetaObject::constructor(int index) const
지정된 index 를 가진 생성자에 대한 메타데이터를 반환합니다.
constructorCount() 및 newInstance()도 참조하십시오 .
int QMetaObject::constructorCount() const
이 클래스에 포함된 생성자의 개수를 반환합니다.
constructor() 및 indexOfConstructor()도 참조하십시오 .
QMetaEnum QMetaObject::enumerator(int index) const
지정된 index 을 가진 열거자의 메타데이터를 반환합니다.
enumeratorCount(), enumeratorOffset(), indexOfEnumerator()도 참조하십시오 .
int QMetaObject::enumeratorCount() const
이 클래스에 포함된 열거자의 개수를 반환합니다.
enumerator(), enumeratorOffset() 및 indexOfEnumerator()도 참조하십시오 .
int QMetaObject::enumeratorOffset() const
이 클래스의 열거자 오프셋, 즉 이 클래스의 첫 번째 열거자의 인덱스 위치를 반환합니다.
클래스에 열거자가 있는 상위 클래스가 없는 경우 오프셋은 0이며, 그렇지 않은 경우 오프셋은 해당 클래스의 상위 클래스에 있는 모든 열거자의 합입니다.
enumerator(), enumeratorCount(), indexOfEnumerator()도 참조하십시오 .
int QMetaObject::indexOfClassInfo(const char *name) const
name 클래스 정보 항목을 찾아 해당 인덱스를 반환하며, 그렇지 않은 경우 -1을 반환합니다.
classInfo(), classInfoCount(), classInfoOffset()도 참조하십시오 .
int QMetaObject::indexOfConstructor(const char *constructor) const
constructor 를 찾아 해당 인덱스를 반환하고, 그렇지 않은 경우 -1을 반환합니다.
constructor 는 normalizedSignature() 함수가 반환하는 것과 같이 정규화된 형식이어야 한다는 점에 유의하십시오.
constructor(), constructorCount(), normalizedSignature()도 참조하십시오 .
int QMetaObject::indexOfEnumerator(const char *name) const
name 를 찾아 해당 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
enumerator(), enumeratorCount(), enumeratorOffset()도 참조하십시오 .
int QMetaObject::indexOfMethod(const char *method) const
method 를 찾아 해당 인덱스를 반환하고, 그렇지 않은 경우 -1을 반환합니다.
method 는 normalizedSignature() 함수가 반환하는 것과 같이 정규화된 형식이어야 합니다.
method(), methodCount(), methodOffset() 및 normalizedSignature()도 참조하십시오 .
int QMetaObject::indexOfProperty(const char *name) const
name 속성을 찾아 해당 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
property(), propertyCount(), propertyOffset()도 참조하십시오 .
int QMetaObject::indexOfSignal(const char *signal) const
signal 를 찾아 그 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
이는 indexOfMethod()과 동일하지만, 해당 메서드가 존재하더라도 신호가 아닌 경우에는 -1을 반환한다는 점이 다릅니다.
signal 는 normalizedSignature()가 반환하는 것과 같이 정규화된 형식이어야 한다는 점에 유의하십시오.
indexOfMethod(), normalizedSignature(), method(), methodCount() 및 methodOffset()도 참조하십시오 .
int QMetaObject::indexOfSlot(const char *slot) const
slot 를 찾아 그 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
이는 indexOfMethod()과 동일하지만, 메서드가 존재하더라도 슬롯이 아닌 경우에는 -1을 반환한다는 점이 다릅니다.
indexOfMethod(), method(), methodCount(), methodOffset()도 참조하십시오 .
[noexcept] bool QMetaObject::inherits(const QMetaObject *metaObject) const
이 QMetaObject 에서 설명하는 클래스가 metaObject 에서 설명하는 타입을 상속하는 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.
한 타입은 스스로를 상속하는 것으로 간주됩니다.
[static, since 6.7] template <typename Functor, typename... Args> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Args &&... arguments)
[static, since 6.7] template <
typename Functor,
typename FunctorReturnType,
typename... Args
>
bool QMetaObject::invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments)
[static, since 6.7] template <typename Functor, typename... Args> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&... arguments)
[static, since 6.7] template <
typename Functor,
typename FunctorReturnType,
typename... Args
>
bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments)
context 의 이벤트 루프에서 arguments 를 사용하여 function 를 호출합니다. function 는 펑터이거나 멤버 함수 포인터일 수 있습니다. 함수를 호출할 수 있는 경우 true 를 반환합니다. 함수 호출의 반환 값은 ret 에 저장됩니다. ret 인자로 사용되는 객체는 qReturnArg()에 객체를 전달하여 얻어야 합니다. 예를 들어:
MyClass *obj = ...;
int result = 0;
QMetaObject::invokeMethod(obj, &MyClass::myMethod, qReturnArg(result), parameter);type 가 설정되어 있으면 해당 연결 유형을 사용하여 함수가 호출됩니다. 그렇지 않으면 Qt::AutoConnection 가 사용됩니다.
참고: 이 함수는 스레드 안전합니다.
이 함수들은 Qt 6.7에서 도입되었습니다.
[static] template <typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret)
[static] template <typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr)
context 의 이벤트 루프에서 ` function `을 호출합니다. ` function `은 펑터이거나 멤버 함수에 대한 포인터일 수 있습니다. 함수를 호출할 수 있는 경우 ` true `을 반환합니다. 해당 함수가 없거나 매개변수가 일치하지 않는 경우 ` false `을 반환합니다. 함수 호출의 반환 값은 ` ret`에 저장됩니다.
type 가 설정된 경우, 해당 연결 유형을 사용하여 함수가 호출됩니다. 그렇지 않으면 Qt::AutoConnection 가 사용됩니다.
참고: 이 함수는 스레드 안전합니다.
[static, since 6.5] template <typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Args &&... args)
[static, since 6.5] template <typename ReturnArg, typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args)
[static, since 6.5] template <typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, Args &&... args)
[static, since 6.5] template <typename ReturnArg, typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args)
obj 객체에 대해 메타 객체 시스템(Meta-Object System)에 등록된, 이름 member 으로 식별되는 메서드를 호출합니다. 여기에는 슬롯, 시그널 및 Q_INVOKABLE 메서드가 포함됩니다. 해당 멤버를 호출할 수 있는 경우 true 을 반환합니다. 해당 멤버가 없거나 매개변수가 일치하지 않는 경우 false 을 반환합니다.
QTemplatedMetaMethodReturnArgument 매개변수를 갖는 오버로드의 경우, member 함수 호출의 반환 값이 ret 에 저장됩니다. 이러한 멤버가 없는 오버로드의 경우, 호출된 함수의 반환 값(있는 경우)은 무시됩니다. QTemplatedMetaMethodReturnArgument는 직접 사용해서는 안 되는 내부 유형입니다. 대신 qReturnArg() 함수를 사용하십시오.
Qt::ConnectionType type 매개변수를 갖는 오버로드는 호출이 동기식일지 여부를 명시적으로 선택할 수 있게 해줍니다:
- type 가 Qt::DirectConnection 인 경우, 해당 멤버는 현재 스레드에서 즉시 호출됩니다.
- type 가 Qt::QueuedConnection 인 경우, QEvent 가 전송되며, 애플리케이션이 obj 가 생성되었거나 이동된 스레드의 이벤트 루프에 진입하는 즉시 멤버가 호출됩니다.
- type 가 Qt::BlockingQueuedConnection 인 경우, 메서드는 Qt::QueuedConnection 와 동일한 방식으로 호출되지만, 이벤트가 전달될 때까지 현재 스레드가 차단된다는 점이 다릅니다. 동일한 스레드 내의 객체 간 통신에 이 연결 유형을 사용하면 교착 상태가 발생합니다.
- type 가 Qt::AutoConnection 인 경우, obj 가 호출자와 동일한 스레드에 존재하면 멤버가 동기식으로 호출되며, 그렇지 않으면 비동기식으로 호출됩니다. 이는 type 매개변수가 없는 오버로드의 동작 방식입니다.
이 함수에는 전체 시그니처가 아닌 시그널이나 슬롯의 이름만 전달하면 됩니다. 예를 들어, QThread 에서 quit() 슬롯을 비동기적으로 호출하려면 다음 코드를 사용합니다:
QMetaObject::invokeMethod(thread, "quit", Qt::QueuedConnection);비동기 메서드 호출의 경우, Qt가 내부적으로 인수를 이벤트에 저장하기 위해 복사해야 하므로 매개변수는 복사 가능한 유형이어야 합니다. Qt 6.5부터는 이 함수가 사용되는 타입을 자동으로 등록하지만, 그 부작용으로 사전 선언된 타입만 사용하여 호출하는 것은 불가능합니다. 또한, const 수식어가 없는 타입에 대한 참조를 매개변수로 사용하는 비동기 호출도 불가능합니다.
임의의 객체 obj 에 대해 ` compute(QString, int, double) ` 슬롯을 동기식으로 호출하고 반환 값을 가져오려면 다음과 같이 합니다:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
qReturnArg(retVal),
QString("sqrt"), 42, 9.7);"compute" 슬롯이 지정된 순서대로 정확히 하나의 QString, 하나의 int, 그리고 하나의 double 를 인수로 받지 않는다면 호출은 실패합니다. 문자 리터럴은 정확히 일치하는 유형이 아니므로, QString 의 유형을 명시적으로 지정해야 했던 점에 유의하십시오. 만약 메서드가 대신 QStringView, qsizetype, float 를 인수로 받는다면, 호출은 다음과 같이 작성되어야 합니다:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
qReturnArg(retVal),
QStringView(u"sqrt"), qsizetype(42), 9.7f);Q_ARG() 및 Q_RETURN_ARG() 매크로를 사용하여 다음과 같이 동일한 호출을 실행할 수도 있습니다:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));이 매크로들은 Qt 6.4 및 이전 버전과의 호환성을 위해 유지되고 있으며, 매크로를 사용하지 않는 매개변수와 자유롭게 혼합하여 사용할 수 있습니다. typedef를 통해 미리 선언된 유형을 매개변수나 반환 유형으로 사용하는 메서드를 호출하는 드문 상황에서 이 매크로들이 필요할 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
이 함수들은 Qt 6.5에서 도입되었습니다.
Q_ARG(), Q_RETURN_ARG() 및 QMetaMethod::invoke()도 참조하십시오 .
[since 6.2] QMetaType QMetaObject::metaType() const
이 메타 객체에 해당하는 메타타입을 반환합니다. 메타 객체가 네임스페이스에서 유래한 경우, 유효하지 않은 메타타입이 반환됩니다.
이 함수는 Qt 6.2에서 도입되었습니다.
QMetaMethod QMetaObject::method(int index) const
지정된 index 을 가진 메서드의 메타데이터를 반환합니다.
methodCount(), methodOffset(), indexOfMethod()도 참조하십시오 .
int QMetaObject::methodCount() const
이 클래스에 포함된 메서드의 개수를 반환합니다. 여기에는 각 기본 클래스에서 제공하는 메서드의 개수도 포함됩니다. 여기에는 일반 멤버 함수뿐만 아니라 시그널과 슬롯도 포함됩니다.
주어진 클래스에 특정한 메서드만 포함된 ` QStringList `를 얻으려면 다음과 같은 코드를 사용하십시오:
const QMetaObject* metaObject = obj->metaObject();
QStringList methods;
for (int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i)
methods << QString::fromLatin1(metaObject->method(i).methodSignature());method(), methodOffset(), indexOfMethod()도 참조하십시오 .
int QMetaObject::methodOffset() const
이 클래스의 메서드 오프셋, 즉 이 클래스의 첫 번째 멤버 함수의 인덱스 위치를 반환합니다.
이 오프셋은 이 클래스의 슈퍼클래스에 있는 모든 메서드의 합계입니다( QObject 에는 deleteLater() 슬롯과 destroyed() 시그널이 있으므로 이 값은 항상 양수입니다).
method(), methodCount(), indexOfMethod()도 참조하십시오 .
[since 6.5] template <typename... Args> QObject *QMetaObject::newInstance(Args &&... arguments) const
이 클래스의 새로운 인스턴스를 생성하고, 새로운 객체를 반환하거나, 적합한 생성자가 없는 경우 ` nullptr `를 반환합니다. 인자 arguments 의 유형은 일치하는 생성자를 찾는 데 사용되며, 이후 시그널-슬롯 연결과 동일한 방식으로 해당 생성자로 전달됩니다.
Q_INVOKABLE 수식어로 선언된 생성자만 메타 객체 시스템을 통해 사용할 수 있다는 점에 유의하십시오.
이 함수는 Qt 6.5에서 도입되었습니다.
constructor()도 참조하십시오 .
[static] QByteArray QMetaObject::normalizedSignature(const char *method)
주어진 신호 및 슬롯( method)의 시그니처를 정규화합니다.
Qt는 정규화된 시그니처를 사용하여 주어진 두 신호와 슬롯이 호환되는지 여부를 판단합니다. 정규화 과정에서는 공백을 최소한으로 줄이고, 적절한 경우 'const'를 앞쪽으로 이동시키며, 값형에서 'const'를 제거하고, const 참조를 값으로 대체합니다.
checkConnectArgs() 및 normalizedType()도 참조하십시오 .
[static] QByteArray QMetaObject::normalizedType(const char *type)
type 를 정규화합니다.
Qt XML의 정규화 방식에 대한 설명은 QMetaObject::normalizedSignature()을 참조하십시오.
예시:
QByteArray normType = QMetaObject::normalizedType(" int const *");
// normType is now "const int*"normalizedSignature()도 참조하십시오 .
QMetaProperty QMetaObject::property(int index) const
지정된 index 을 가진 속성의 메타데이터를 반환합니다. 해당 속성이 존재하지 않으면 null QMetaProperty 이 반환됩니다.
propertyCount(), propertyOffset(), indexOfProperty()도 참조하십시오 .
int QMetaObject::propertyCount() const
이 클래스의 속성 수를 반환하며, 여기에는 각 기저 클래스에서 제공되는 속성의 수도 포함됩니다.
주어진 클래스에 고유한 속성을 포함하는 ` QStringList `를 얻으려면 다음과 같은 코드를 사용하십시오:
const QMetaObject* metaObject = obj->metaObject();
QStringList properties;
for (int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i)
properties << QString::fromLatin1(metaObject->property(i).name());property(), propertyOffset(), indexOfProperty()도 참조하십시오 .
int QMetaObject::propertyOffset() const
이 클래스의 속성 오프셋, 즉 이 클래스의 첫 번째 속성의 인덱스 위치를 반환합니다.
이 오프셋은 이 클래스의 상위 클래스에 있는 모든 속성의 합계입니다( QObject 에는 objectName 속성이 있으므로 이 값은 항상 양수입니다).
property(), propertyCount(), indexOfProperty()도 참조하십시오 .
const QMetaObject *QMetaObject::superClass() const
상위 클래스의 메타 객체를 반환하거나, 해당 객체가 없는 경우 ` nullptr `를 반환합니다.
className()도 참조하십시오 .
QMetaProperty QMetaObject::userProperty() const
USER 플래그가 true로 설정된 속성을 반환합니다.
QMetaProperty::isUser()도 참조하십시오 .
매크로 설명서
QMetaMethodArgument Q_ARG(Type, const Type &value)
이 매크로는 Type 와 해당 타입의 value 를 받아, QMetaMethodArgument를 반환합니다. 이 QMetaMethodArgument는 Args &&... 인자와 함께 템플릿 QMetaObject::invokeMethod()에 전달될 수 있습니다.
Q_RETURN_ARG()도 참조하십시오 .
QMetaMethodReturnArgument Q_RETURN_ARG(Type, Type &value)
이 매크로는 ` Type `와 해당 유형의 ` value `에 대한 비정수 참조를 인수로 받아, `QMetaMethodReturnArgument`를 반환합니다. 이 `QMetaMethodReturnArgument`는 ` Args &&... ` 인수를 사용하여 템플릿 ` QMetaObject::invokeMethod()`에 전달될 수 있습니다.
Q_ARG()도 참조하십시오 .
© 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.