Qt는 어떻게 동작 하는지 정리 한다.
1. Signal / Slot
- Signal : object가 보내는 메시지. 이벤트나 인터럽트등과 유사
- Slot : signal을 받아들이고 반응하는 함수 이벤트, 인터럽트 핸들러와 유사
2. Meta object
- Qt는 Meta-object system을 지원한다.
- 순수 C++에서 지원되지 않는 다음의 항목을 지원하기 위한 방법이다.
> Introspection : 런타임 시 타입 조사.. //TODO : Reflection? RTTI? 확인 필요
> 비동기 함수 호출
- meta-object system을 사용 하려며 QObject를 상속 받아 사용한다.
> QObject를 상속 받으면 meta object compiler가 signal 과 slot을 추가 한다.
> QMetaObject를 이용해 meta-object method를 사용한다.
3. Macros
- Qt에서 가장 중요한 매크로는 Q_OBJECT 이다.
- meta-object-compiler는 Q_OBJECT 매크로를 이용해서 connect, signals, slots등 c++의 syntax가 아닌 것들을 지원한다.
- Q_OBJECT는 클래스 선언 바로 다음에 위치 해야 한다.
- moc을 위한 매크로는 다음이 있다.
> signals
> public / protected / private slots
- SIGNAL / SLOT 매크로는 프로토타입을 스트링으로 변환하여 meta-object 기능을 지원하는데 사용된다.
4. Custom signals and slots
- 클래스 선언에 Q_OBJECT 매크로를 추가한다.
- signals 섹션에 signals prototype을 추가 한다.
- slots 섹션에 slots prototype을 추가한다.
- 보통 메서드와 동일하게 slot을 구현한다.
- connect 를 이용하여 signal과 slot을 연결한다.
- emit [custom_signal(params)]; 형식으로 signal을 발생시킨다.

덧글