Spec-Zone.ru › Qt 5.15

Начало работы с 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. Создать объект Источник, который дублируется на других узлах, с использованием или без использования 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-5.15/qtremoteobjects-gettingstarted.html

Spec-Zone.ru

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