Qt Remote Objects 출처

높은 수준에서는 QObject 유형을 직접 소스로 사용하거나 .rep 템플릿에서 원하는 API를 정의하여 repc 컴파일러와 함께 사용할 수 있습니다.

이미 완전히 정의된 QObject 이 있는 경우 QRemoteObjectHostBase::enableRemoting()에 전달하여 소스로 사용할 수 있습니다. 이렇게 하면 다른 프로세스나 디바이스에서 상호작용할 객체의 dynamics replicas 를 만들 수 있습니다.

자세한 내용은 원격 객체 상호 작용을 참조하세요.

REPC_SOURCE 변수를 사용하여 프로젝트의 소스 헤더 파일을 생성하도록 하면 필요한 API를 구현하는 데 세 가지 옵션이 제공됩니다.

클래스 이름이 Foo라고 가정하면 다음과 같은 옵션이 있습니다:

.rep 파일을 만드는 방법에 대한 자세한 내용은 rep 파일 형식을 참조하세요.

헤더에는 각 속성에 대한 기본 가져 오기/설정기 메서드를 제공하고 헤더에 올바른 속성 유형의 데이터 멤버를 구현하는 <Type>SimpleSource 클래스가 정의되어 있습니다. 여기서 "<Type>"은 .rep 파일의 클래스 이름을 나타내므로 .rep 파일의 클래스 유형이 "MyType"인 경우 생성된 헤더 파일에는 MyTypeSimpleSource 클래스가 선언됩니다. 이는 API 사용을 빠르게 시작할 수 있는 방법입니다. 이 클래스를 사용하려면 이 클래스를 상속하는 클래스를 작성하고 생성된 헤더 파일에서 순수 가상으로 표시된 정의된 슬롯을 구현해야 합니다. 노출된 프로퍼티를 관리하고 신호를 내보내는 데 필요한 로직도 클래스에 추가해야 합니다.

구현 세부 정보를 숨겨야 하는 경우 헤더 파일에 선언된 두 번째 클래스인 <Type>Source 클래스를 사용하세요. 이 클래스의 정의는 데이터 멤버를 제공하지 않으며, 가져오는/설정하는 함수를 순수 가상으로 만듭니다. 코드를 더 작성해야 할 수도 있지만 이 클래스를 사용하면 구현에 더 많은 유연성을 제공합니다.

헤더에 생성된 세 번째 클래스는 <Type>SourceAPI입니다. 이 클래스는 특히 QRemoteObjectHostBase::enableRemoting()의 템플릿 버전에서 사용하기 위한 템플릿 클래스로, 필요한 API를 지원하는 모든 QObject 을 소스로 사용할 수 있습니다. 이 클래스를 사용하여 속성 또는 신호/슬롯 매개변수를 숨기거나 변환할 수 있습니다. 구현에서 올바른 API를 제공하지 않으면 컴파일 시 경고가 표시됩니다.

참고: 레플리카 및 소스는 모두 QObject; 에서 파생되지만 QObject API는 노출되지 않습니다. 예를 들어, 복제본에는 destroyed 신호가 있지만 소스의 destroyed 신호는 전파되지 않습니다. 소스와 각 복제본은 고유한 연결과 수명을 가진 고유한 QObject입니다. 대신, 노출되는 API는 repc에서 사용하는 .rep 템플릿에 의해 정의됩니다. 원시 QObject의 경우 모든 API 요소는 특정 조상으로부터의 상속 체인에 정의됩니다. Q_CLASSINFO("RemoteObject Type") 을 조상으로 정의하지 않는 한 항상 QObject 의 부모가 사용됩니다. Q_CLASSINFO("RemoteObject Type") 을 사용하는 경우 해당 클래스의 API가 사용되는 가장 낮은 수준의 API입니다.

소스 식별

호스트 노드는 둘 이상의 소스를 공유할 수 있으므로 각 소스에는 이름이 필요합니다. 모든 repc 생성 헤더에는 노드가 클래스 이름을 확인할 수 있는 방법이 포함되어 있습니다. 복제본, 단순 소스 또는 소스 유형의 경우 Q_CLASSINFO, SourceAPI 유형의 경우 정적 name() 함수가 있습니다. 자체 QObject 유형을 QRemoteObjectHostBase::enableRemoting()에 전달하면 다음 로직을 사용하여 이름이 결정됩니다:

  • 선택적으로 QRemoteObjectHostBase::enableRemoting()에 이름을 전달할 수 있습니다. 제공된 경우 해당 이름이 사용됩니다.
  • 개체 또는 그 상위 개체 중 하나에 "RemoteObject Type" 유형의 Q_CLASSINFO 이 정의되어 있는 경우 해당 유형 이름이 사용됩니다.
  • QObject 의 objectName이 설정되어 있으면 그 이름이 사용됩니다.
  • 위의 어느 것도 사용할 수 없으면 QRemoteObjectHostBase::enableRemoting() 호출이 실패하여 false를 반환합니다.

© 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.