Spec-Zone.ru › Qt

Начало работы с Qt Remote Objects

Введение

Модуль Qt Remote Objects предоставляет простой способ обмена API Qt между процессами и устройствами. Для этого требуется канал данных между процессами и устройствами. Для создания этого канала данных сначала нужен QRemoteObjectNode.

В QtRO узел является конечной точкой для связи. В сети удаленных объектов каждый участник, будь то процесс или устройство, нуждается в собственном узле. QtRO — это сеть «равноправных узлов», где подключенные узлы являются связями в сети.

Узлы сами по себе не очень полезны. Но их ценность проявляется, когда вы добавляете классы QObject в узел для обмена. Тогда любой узел-партнёр может запросить копию или экземпляр общего объекта из узла-хоста, узла, который его предоставляет.

В отличие от использования обычных экземпляров классов (с независимыми свойствами и сигналами), QtRO автоматически синхронизирует изменения в общем объекте по всем его копиям. За некоторыми исключениями, эти копии имеют идентичный API Qt, как исходный объект, и предназначены для использования точно так же, как если бы исходный объект был доступен.

В QtRO исходный объект называется источником. Это полностью реализованный класс C++, с необходимой бизнес-логикой для обеспечения требуемой функциональности. Копии этого объекта называются репликами. Вам не нужно писать код C++ для реплики; вместо этого вы запрашиваете экземпляр из узла. Хотя вам нужен код для использования реплики, например, для подключения сигналов к собственным слотам, вам не нужно реализовывать внутреннее поведение — это уже сделано за вас в источнике.

Поскольку источник может находиться в другом процессе или даже на другом устройстве, в QtRO есть факторы, которые необходимо учитывать, с которыми вы обычно не сталкиваетесь при разработке без межпроцессного взаимодействия (IPC). В частности, что произойдет, если процесс или устройство отсутствует? Именно здесь появляются дополнения к API реплики:

  • Сигнал initialized() генерируется один раз, когда реплика получила состояние источника из сети QtRO.
  • Как свойство isReplicaValid, так и сигнал stateChanged() сообщают вам, если соединение потеряно.

Объекты, обмениваемые через QtRO, используют связи (каналы) между узлами для всех коммуникаций. Если вы хотите обмениваться QObject, вы должны создать узел-хост с URL-адресом, к которому могут подключаться другие узлы. Вы также можете использовать реестр для упрощения подключений, но ваши узлы, которые обмениваются источниками, все равно должны быть узлами-хостами. Каждый общий объект получает имя (a QString), используемое для его идентификации в сети QtRO.

Реализация

Для иллюстрации использования удаленных объектов на стороне источника нам нужно:

  1. Создать объект Source, который дублируется на другие узлы, с использованием или без использования repc, компилятора Qt Remote Objects.
  2. Необязательно, создать реестр. В противном случае используйте прямые соединения.
  3. Создать узел-хост, чтобы объект источника можно было обмениваться.
  4. Вызвать функцию узла enableRemoting() для обмена объектом источника.

На стороне реплики нам нужно:

  1. Необязательно, использовать repc для генерации заголовка реплики для вашего проекта.
  2. Создать узел, который будет подключаться к узлу-хосту источника.
  3. Вызвать функцию узла acquire() для создания указателя на реплику.

Следующие примеры иллюстрируют как объекты, скомпилированные с помощью repc, статические объекты, так и динамические объекты источника. Кроме того, они демонстрируют прямые подключения, а также подключения, использующие реестр между узлами.

  • Пример 1: Прямое подключение с использованием статического источника
  • Пример 2: Прямое подключение с динамической репликой
  • Пример 3: Подключения к удалённым узлам с использованием реестра

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtremoteobjects-gettingstarted.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API