개체 모델
표준 C++ 객체 모델은 객체 패러다임에 대한 매우 효율적인 런타임 지원을 제공합니다. 하지만 정적인 특성으로 인해 특정 문제 영역에서는 유연성이 떨어집니다. 그래픽 사용자 인터페이스 프로그래밍은 런타임 효율성과 높은 수준의 유연성이 모두 필요한 영역입니다. Qt는 C++의 속도와 Qt 객체 모델의 유연성을 결합하여 이를 제공합니다.
Qt는 이러한 기능을 C++에 추가합니다:
- 시그널과 슬롯이라는 원활한 객체 통신을 위한 매우 강력한 메커니즘
- 쿼리 가능하고 디자인 가능한 객체 속성
- 강력한 이벤트 및 이벤트 필터
- 국제화를 위한 문맥 문자열 번역
- 정교한 간격 구동 타이머를 통해 이벤트 중심 GUI에서 많은 작업을 우아하게 통합할 수 있습니다.
- 객체 소유권을 자연스럽게 구성하는 계층적이고 쿼리 가능한 객체 트리
- 참조된 객체가 파괴되면 매달린 포인터가 되는 일반 C++ 포인터와 달리 참조된 객체가 파괴되면 자동으로 0으로 설정되는 가드 포인터(QPointer)를 제공합니다.
- 라이브러리 경계를 넘나들며 작동하는 동적 형변환.
- 사용자 정의 유형 생성 지원.
이러한 Qt 기능의 대부분은 QObject 에서 상속을 기반으로 표준 C++ 기술로 구현되었습니다. 객체 통신 메커니즘이나 동적 프로퍼티 시스템과 같은 다른 기능들은 Qt 자체에서 제공하는 메타 객체 시스템 (Meta-Object Compiler (moc))이 필요합니다.
메타 객체 시스템은 진정한 컴포넌트 GUI 프로그래밍에 더 적합한 언어를 만드는 C++ 확장입니다.
중요 클래스
이러한 클래스는 Qt 객체 모델의 기초를 형성합니다.
클래스에 대한 추가 정보 | |
순차 및 연관 컨테이너의 공통 기능 | |
열거자에 대한 메타 데이터 | |
멤버 함수에 대한 메타 데이터 | |
Qt 객체에 대한 메타 정보를 포함합니다. | |
프로퍼티에 대한 메타 데이터 | |
순차 컨테이너에 대한 타입 지우기 액세스 허용 | |
메타 객체 시스템에서 명명된 형을 관리합니다. | |
모든 Qt 객체의 베이스 클래스 | |
여러 QObject의 수명 감시 | |
QObject에 가드 포인터를 제공하는 템플릿 클래스 | |
QObject::blockSignals()를 둘러싼 예외 안전 래퍼 | |
식별 가능한 발신자로부터의 신호 묶음 | |
가장 일반적인 Qt 데이터형에 대한 유니온처럼 작동 |
Qt 객체: 신원 대 값
위에 나열된 Qt 객체 모델에 추가된 기능 중 일부는 Qt 객체를 값이 아닌 아이덴티티로 생각해야 합니다. 값은 복사되거나 할당되지만 아이덴티티는 복제됩니다. 복제는 이전 아이덴티티의 정확한 복사본이 아니라 새로운 아이덴티티를 생성하는 것을 의미합니다. 예를 들어 쌍둥이는 서로 다른 ID를 가지고 있습니다. 쌍둥이는 똑같아 보이지만 이름도 다르고, 사는 곳도 다르며, 소셜 네트워크도 완전히 다를 수 있습니다.
따라서 ID 복제는 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. Qt 객체 모델에서 이것이 무엇을 의미하는지 알 수 있습니다.
Qt 객체...
- 는 고유한 QObject::objectName()를 가질 수 있습니다. Qt 객체를 복사한다면, 복사본에 어떤 이름을 붙여야 할까요?
- 는 객체 계층 구조에 위치가 있습니다. Qt 객체를 복사한다면, 복사본은 어디에 위치해야 할까요?
- 다른 Qt 객체에 연결하여 신호를 방출하거나 다른 객체가 방출하는 신호를 수신할 수 있습니다. Qt 객체를 복사하는 경우 이러한 연결을 복사본으로 어떻게 전송해야 하나요?
- 런타임에 C++ 클래스에서 선언되지 않은 새로운 프로퍼티를 추가할 수 있습니다. Qt 객체를 복사할 때 복사본에 원본에 추가된 프로퍼티가 포함되어야 하나요?
이러한 이유로 Qt 객체는 값이 아닌 아이덴티티로 취급해야 합니다. 아이덴티티는 복사되거나 할당되는 것이 아니라 복제되며, 아이덴티티 복제는 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. 따라서 QObject 및 QObject 의 모든 서브클래스(직접 또는 간접)는 copy constructor and assignment operator 가 비활성화되어 있습니다.
© 2025 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.