Qt 메타 객체 시스템 - 리플렉션 사용
장 탐색
1 분석
리플렉션의 여러 용도:
- 문자열 가져오기 클래스
- 문자열은 클래스 함수(메서드)를 사용합니다.
- 문자열은 클래스 변수(속성)를 사용합니다.
2 정보
QObject::metaObject() 메서드를 통해 QObject에서 상속된 모든 클래스는 메타 객체 시스템에서 생성된 metaObject 객체를 반환하고 QMetaObject::newInstance()로 새 인스턴스를 생성할 수 있습니다.
반사 클래스 ClassA는 Q_INVOKABLE 및 Q_PROPERTY 플래그의 도움으로 QObject를 상속합니다
.
- QMetaClassInfo
- QMetaEnum
- Q메타 방법
- Q메타 속성
그리고 호출을 구현합니다.
자세한 내용은
참조 문서 1: Qt의 리플렉션 메커니즘을 사용하여 작성된 클래스에 대한 관련 정보 얻기
참조 문서 2: Qt 리플렉션 메커니즘을 사용하여 속성 정보 얻기를 참조하십시오.
2.1 Q_INVOKABLE을 사용하여 클래스의 매개변수화/비매개변수화 함수 호출 실현
Qt는 반사 메커니즘을 사용하여 객체의 멤버 함수 호출을 실현합니다.
QtInvoke* inv = new QtInvokeA;
qDebug() << QMetaObject::invokeMethod(inv, "test");int retVal = 0;
qDebug() << QMetaObject::invokeMethod(inv
, "testAdd"
,Q_RETURN_ARG(int, retVal)
,Q_ARG(int, 65)
,Q_ARG(int, 42));
qDebug() << retVal;
2.2 기능 및 속성
Qt의 리플렉션 사용법
Object에서 상속받은 리플렉션 클래스를 등록할 때 반환된 일련번호를 QMap(int형, QString 클래스명)에 저장할 수 있으며, 문자열을 통해 클래스객체를 생성하는데 사용된다.
다시 채우다: