Meta-Object 시스템

Qt에서 제공하는 meta-object 시스템은 객체간 통신을 위한 signal 및 slot 매커니즘, run-time 타입 정보, 동적 property 시스템을 제공합니다.

meta-object 시스템은 다음 3가지를 기반으로 합니다.

  • QObject class가 meta-object 시스템을 이용할 수 있는 base class로 제공됩니다.
  • class 선언에 Q_OBJECT 매크로를 사용하면 dynamic property, signla, slot와 같이 meta-object 기능을 이용할 수 있습니다.
  • moc(Meta-Object Compiler)는 각 QObject의 subclass에 meta-object 기능을 구현하는데 필요한 코드를 제공합니다.

 

컴파일

moc 툴이 C++ 소스 파일을 읽어들이고 Q_OBJECT 매크로를 발견하면 meta-object 코드가 들어가는 새로운 C++ 소스 파일을 생성합니다.

 

meta-object 코드

  • signal 및 slot 매커니즘 제공
  • QObject::metaObject() 해당 class에 대한 관련 meta-object 반환
  • QMetaObject::className()는 run-time시에 string으로 class 이름을 반환
  • QObject::inherits()는 QObject 상속 트리 내에 특정 class를 상속하는지 여부를 반환
  • QObject::tr()과 QObject::trUtf8()로 string을 지역화
  • QObject::setProperty()와 QObject::property()로 이름을 이용해서 동적으로 set/get property 사용
  • QMetaObject::newInstance()로 해당 class의 새로운 인스턴스를 생성

 

[개발] QGroundControl를 위한 Qt – Meta-Object 시스템

답글 남기기