Qt의 메타-오브젝트 시스템(meta-object system)은 객체간 통신을 위한 시그널-슬롯 매커니즘과, 런타임 타입 정보, 동적 속성 시스템을 제공한다.
메타-오브젝트 시스템은 아래 세 가지를 기반으로 한다:
1. QObject 클래스 : 객체를 위한 기반 클래스를 제공하여 메타-오브젝트 시스템의 이점을 이용할 수 있게 한다.
2. Q_OBJECT 매크로 : 클래스의 private 섹션 안에 선언되며, 동적 속성과 시그널 슬롯 등의 메타-오브젝트 기능을 사용할 수 있게 한다.
3. Meta-Object Compiler(moc) : QObject의 자식 클래스들에게 필요한 메타-오브젝트 구현 코드를 제공한다.
moc 툴은 C++ 헤더, 소스 파일 읽어 Q_OBJECT 매크로가 포함된 클래스를 찾고,
이를 찾으면 각 클래스에 대해 메타-오브젝트 코드를 포함하는 또다른 C++ 소스 파일을 생성해낸다.
이렇게 생성된 소스파일은 인클루드, 컴파일되고 클래스 구현과 링크되어 사용된다.
예) 헤더파일에 Q_OBJECT 매크로가 있는 클래스가 있다면,
메타-오브젝트를 이용할 수 있는 코드들을 추가한 새로운 헤더 파일을 만들어내고,
이 헤더 파일을 include한 새로운 C++ 구현 파일이 생겨 빌드시에는 이를 컴파일하고 링크하여 사용한다.
참고
'개발 > Qt' 카테고리의 다른 글
[QTest] Cmake로 QTest 빌드 중 error LNK2019: unresolved external symbol _main 오류 (0) | 2023.07.12 |
---|---|
[Qt] QSqlQuery에서 regexp 사용하기 - sqlite3 (0) | 2023.03.06 |
[Qt] 디렉토리가 비어있는지 체크, 디렉토리 안 파일 개수 세기 (0) | 2022.06.14 |
[Qt] 파일에서 읽기 전용(Read Only) 속성 제거하기 (0) | 2022.03.04 |
[Qt] QPushButton의 background color 설정하기/가져오기 (0) | 2022.02.21 |