개체 모델

표준 C++ 객체 모델은 객체 패러다임에 대한 매우 효율적인 런타임 지원을 제공합니다. 하지만 정적인 특성으로 인해 특정 문제 영역에서는 유연성이 떨어집니다. 그래픽 사용자 인터페이스 프로그래밍은 런타임 효율성과 높은 수준의 유연성이 모두 필요한 영역입니다. Qt는 C++의 속도와 Qt 객체 모델의 유연성을 결합하여 이를 제공합니다.

Qt는 이러한 기능을 C++에 추가합니다:

이러한 Qt 기능의 대부분은 QObject 에서 상속을 기반으로 표준 C++ 기술로 구현되었습니다. 객체 통신 메커니즘이나 동적 프로퍼티 시스템과 같은 다른 기능들은 Qt 자체에서 제공하는 메타 객체 시스템 (Meta-Object Compiler (moc))이 필요합니다.

메타 객체 시스템은 진정한 컴포넌트 GUI 프로그래밍에 더 적합한 언어를 만드는 C++ 확장입니다.

중요 클래스

이러한 클래스는 Qt 객체 모델의 기초를 형성합니다.

QMetaClassInfo

클래스에 대한 추가 정보

QMetaContainer

순차 및 연관 컨테이너의 공통 기능

QMetaEnum

열거자에 대한 메타 데이터

QMetaMethod

멤버 함수에 대한 메타 데이터

QMetaObject

Qt 객체에 대한 메타 정보를 포함합니다.

QMetaProperty

프로퍼티에 대한 메타 데이터

QMetaSequence

순차 컨테이너에 대한 타입 지우기 액세스 허용

QMetaType

메타 객체 시스템에서 명명된 형을 관리합니다.

QObject

모든 Qt 객체의 베이스 클래스

QObjectCleanupHandler

여러 QObject의 수명 감시

QPointer

QObject에 가드 포인터를 제공하는 템플릿 클래스

QSignalBlocker

QObject::blockSignals()를 둘러싼 예외 안전 래퍼

QSignalMapper

식별 가능한 발신자로부터의 신호 묶음

QVariant

가장 일반적인 Qt 데이터형에 대한 유니온처럼 작동

Qt 객체: 신원 대 값

위에 나열된 Qt 객체 모델에 추가된 기능 중 일부는 Qt 객체를 값이 아닌 아이덴티티로 생각해야 합니다. 값은 복사되거나 할당되지만 아이덴티티는 복제됩니다. 복제는 이전 아이덴티티의 정확한 복사본이 아니라 새로운 아이덴티티를 생성하는 것을 의미합니다. 예를 들어 쌍둥이는 서로 다른 ID를 가지고 있습니다. 쌍둥이는 똑같아 보이지만 이름도 다르고, 사는 곳도 다르며, 소셜 네트워크도 완전히 다를 수 있습니다.

따라서 ID 복제는 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. Qt 객체 모델에서 이것이 무엇을 의미하는지 알 수 있습니다.

Qt 객체...

  • 는 고유한 QObject::objectName()를 가질 수 있습니다. Qt 객체를 복사한다면, 복사본에 어떤 이름을 붙여야 할까요?
  • 객체 계층 구조에 위치가 있습니다. Qt 객체를 복사한다면, 복사본은 어디에 위치해야 할까요?
  • 다른 Qt 객체에 연결하여 신호를 방출하거나 다른 객체가 방출하는 신호를 수신할 수 있습니다. Qt 객체를 복사하는 경우 이러한 연결을 복사본으로 어떻게 전송해야 하나요?
  • 런타임에 C++ 클래스에서 선언되지 않은 새로운 프로퍼티를 추가할 수 있습니다. Qt 객체를 복사할 때 복사본에 원본에 추가된 프로퍼티가 포함되어야 하나요?

이러한 이유로 Qt 객체는 값이 아닌 아이덴티티로 취급해야 합니다. 아이덴티티는 복사되거나 할당되는 것이 아니라 복제되며, 아이덴티티 복제는 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. 따라서 QObjectQObject 의 모든 서브클래스(직접 또는 간접)는 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.