시작하기 Qt Remote Objects

소개

Qt Remote Objects 모듈은 프로세스와 디바이스 간에 Qt API를 쉽게 공유할 수 있는 방법을 제공합니다. 이 기능을 사용하려면 프로세스와 디바이스 사이에 데이터 채널이 필요합니다. 이 데이터 채널을 설정하려면 먼저 QRemoteObjectNode.

QtRO에서 노드는 통신을 위한 엔드포인트입니다. 원격 객체 네트워크에서는 프로세스든 디바이스든 각 참가자에게 자체 노드가 필요합니다. QtRO는 피어 투 피어 네트워크이며, 연결된 노드는 네트워크의 링크가 됩니다.

노드는 그 자체로는 별다른 용도를 제공하지 않습니다. 하지만 공유할 노드에 QObject 클래스를 추가할 때 그 가치가 발휘됩니다. 그러면 모든 피어 노드는 공유 객체를 공유하는 노드인 호스트 노드에 공유 객체의 복사본 또는 인스턴스를 요청할 수 있습니다.

일반 클래스 인스턴스(독립적인 프로퍼티 및 신호 방출)를 사용할 때와 달리, QtRO는 모든 사본에서 공유 개체의 변경 사항을 자동으로 동기화합니다. 몇 가지 예외를 제외하고 이러한 복사본은 원본 객체와 동일한 Qt API를 가지며, 원본 객체를 사용할 수 있는 것처럼 정확하게 사용하도록 되어 있습니다.

QtRO에서는 원본 객체를 소스라고 합니다. 이는 필요한 기능을 제공하는 데 필요한 비즈니스 로직이 완전히 구현된 C++ 클래스입니다. 이 객체의 복사본을 복제본이라고합니다. 복제본에 대한 C++ 코드를 작성할 필요 없이 대신 노드에서 인스턴스를 요청하면 됩니다. 자체 슬롯에 신호를 연결하는 등 복제본을 사용하려면 일부 코드가 필요하지만, 내부 동작은 소스에서 이미 구현되어 있으므로 구현할 필요가 없습니다.

소스가 다른 프로세스나 다른 디바이스에 있을 수 있기 때문에 일반적으로 프로세스 간 통신(IPC)을 사용하지 않고 개발할 때는 고려해야 할 요소들이 QtRO에 있습니다. 구체적으로 프로세스나 디바이스가 없으면 어떻게 될까요? 바로 이 부분에서 레플리카 API에 추가된 기능이 유용합니다:

QtRO를 통해 공유되는 개체는 모든 통신에 노드 간의 링크(도관)를 사용합니다. QObject 를 공유하려면 다른 노드가 연결할 수 있는 URL을 가진 호스트 노드를 만들어야 합니다. 레지스트리를 사용하여 연결을 용이하게 할 수도 있지만 소스를 공유하는 노드는 여전히 호스트 노드여야 합니다. 각 공유 객체에는 이름( QString)이 주어지며, 이 이름은 QtRO 네트워크에서 객체를 식별하는 데 사용됩니다.

구현

원격 객체의 사용을 설명하기 위해 소스 측에서는 다음과 같이 해야 합니다:

  1. Qt Remote Objects 컴파일러를 사용하거나 사용하지 않고 다른 노드에 복제되는 소스 오브젝트를 만듭니다.
  2. 선택 사항으로 레지스트리를 생성합니다. 그렇지 않으면 직접 연결을 사용합니다.
  3. 소스 객체를 공유할 수 있도록 호스트 노드를 만듭니다.
  4. 노드의 enableRemoting() 함수를 호출하여 소스 객체를 공유합니다.

복제본 쪽에서는 이렇게 해야 합니다:

  1. 선택 사항으로 repc를 사용하여 프로젝트의 복제본 헤더를 생성합니다.
  2. 소스 호스트 노드와 연결할 노드를 만듭니다.
  3. 노드의 acquire() 함수를 호출하여 복제본에 대한 포인터를 만듭니다.

다음 예제에서는 repc로 컴파일된 정적 오브젝트와 동적 소스 오브젝트를 모두 보여줍니다. 또한 직접 연결과 노드 간 레지스트리를 사용하는 연결도 보여줍니다.

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