Qt Remote Objects 소스
대략적으로 말하면, ` QObject ` 유형을 소스로 직접 사용할 수도 있고, ` .rep ` 템플릿에 원하는 API를 정의하여 repc 컴파일러와 함께 사용할 수도 있습니다.
이미 완전히 정의된 QObject 가 있는 경우, 이를 QRemoteObjectHostBase::enableRemoting()에 전달하여 소스로 사용할 수 있습니다. 이렇게 하면 다른 프로세스나 디바이스가 해당 객체의 dynamics replicas 를 생성하여 상호작용할 수 있습니다.
자세한 내용은 ‘원격 객체 상호작용’을 참조하십시오.
REPC_SOURCE 변수를 사용하여 repc가 프로젝트용 소스 헤더 파일을 생성하도록 하면, 필요한 API를 구현하는 데 세 가지 다른 옵션이 제공됩니다.
클래스 이름이 Foo라고 가정하면, 다음과 같은 옵션이 있습니다:
- FooSimpleSource 상속
- FooSource 상속
- FooSourceAPI 사용 (자체 구현) QObject
.rep 파일을 생성하는 방법에 대한 자세한 내용은 ‘rep 파일 형식’을 참조하십시오.
헤더에는 <Type>SimpleSource 클래스가 정의되어 있으며, 이 클래스는 각 속성에 대한 기본 getter/setter 메서드를 제공하고 헤더 내에서 올바른 속성 유형의 데이터 멤버를 구현합니다. 여기서 "<Type>"은 .rep 파일의 클래스 이름을 나타냅니다. 따라서 .rep 파일에서 클래스 유형이 "MyType"인 경우, 생성된 헤더 파일에는 MyTypeSimpleSource 클래스가 선언됩니다. 이는 API 사용을 빠르게 시작하는 방법입니다. 이 클래스를 사용하려면, 이 클래스를 상속받는 클래스를 작성하고, 생성된 헤더 파일에서 순수 가상(pure virtual)으로 표시된 정의된 슬롯을 구현해야 합니다. 또한 노출된 속성을 관리하고 신호를 발산하기 위한 필요한 로직을 해당 클래스에 추가해야 합니다.
구현 세부 사항을 숨겨야 하는 경우, 헤더 파일에 선언된 두 번째 클래스인 <Type>Source 클래스를 사용하십시오. 이 클래스의 정의는 데이터 멤버를 제공하지 않으며, 게터/세터 함수도 순수 가상 함수로 만듭니다. 코드를 더 작성해야 할 수도 있지만, 이 클래스를 사용하면 구현에 있어 더 큰 유연성을 얻을 수 있습니다.
헤더에 생성된 세 번째 클래스는 <Type>SourceAPI입니다. 이 클래스는 템플릿화된 QRemoteObjectHostBase::enableRemoting() 버전에서 특별히 사용하기 위한 템플릿 클래스로, 필요한 API를 지원하는 모든 QObject 를 소스로 사용할 수 있게 해줍니다. 이 클래스를 사용하여 속성이나 신호/슬롯 매개변수를 숨기거나 변환하십시오. 구현에서 올바른 API를 제공하지 않는 경우, 컴파일 시 경고가 발생합니다.
참고: 복제본(replica )과 소스(source)는 모두 QObject 에서 파생되지만, 이들의 QObject API는 절대 노출되지 않습니다. 예를 들어, 복제본에는 destroyed 신호가 있지만, 소스의 destroyed 신호는 전파되지 않습니다. 소스와 그 각 복제본은 고유한 연결과 수명을 가진 고유한 QObject입니다. 대신, 노출되는 API는 repc에서 사용하는 .rep 템플릿에 의해 정의됩니다. 원시 QObject의 경우, 모든 API 요소는 특정 조상 클래스로부터의 상속 체인 내에서 정의됩니다. 조상 클래스에서 Q_CLASSINFO("RemoteObject Type") 를 정의하지 않는 한, 항상 QObject 의 부모 클래스가 사용됩니다. Q_CLASSINFO("RemoteObject Type") 를 사용하는 경우, 해당 클래스의 API가 사용되는 최하위 수준의 API가 됩니다.
출처 식별
호스트 노드는 하나 이상의 소스를 공유할 수 있으므로, 각 소스에는 이름이 필요합니다. repc로 생성된 모든 헤더에는 노드가 클래스 이름을 결정할 수 있는 방법이 포함되어 있습니다. replica, simplesource 또는 source 유형의 경우 Q_CLASSINFO 를 사용하고, SourceAPI 유형의 경우 정적 함수 name() 를 사용합니다. 사용자 정의 QObject 유형을 QRemoteObjectHostBase::enableRemoting()에 전달하는 경우, 이름은 다음 논리에 따라 결정됩니다:
- QRemoteObjectHostBase::enableRemoting()에 이름을 선택적으로 전달할 수 있습니다. 이름이 제공된 경우 해당 이름이 사용됩니다.
- 객체나 그 조상 중 하나에 “RemoteObject Type” 유형의 Q_CLASSINFO 가 정의되어 있는 경우, 해당 유형 이름이 사용됩니다.
- QObject 의 objectName이 설정되어 있는 경우, 해당 이름이 사용됩니다.
- 위의 어느 것도 사용할 수 없는 경우, QRemoteObjectHostBase::enableRemoting() 호출은 실패하고 false를 반환합니다.
© 2026 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.