Spec-Zone.ru › Qt 5.15

Источник Qt удалённых объектов

В общем случае, вы можете использовать тип QObject напрямую в качестве источника; или вы можете определить требуемый API в .rep шаблоне для использования с компилятором repc.

Если у вас уже есть полностью определённый QObject, вы можете использовать его в качестве источника, передав его в QRemoteObjectHostBase::enableRemoting(). Таким образом, другие процессы или устройства смогут создать динамические копии объекта для взаимодействия с ним.

Для получения дополнительной информации см. Взаимодействие с удалёнными объектами.

Позволяя repc сгенерировать заголовочный файл источника для вашего проекта, используя переменную REPC_SOURCE, предоставляются три разных варианта реализации необходимого API.

Предположим, что имя вашего класса — Foo, тогда у вас есть следующие варианты:

  • Наследование от FooSimpleSource
  • Наследование от FooSource
  • Использование FooSourceAPI с вашим собственным QObject

Для получения более подробной информации о том, как создать файл .rep, см. Формат файла rep.

В заголовке определён класс <Type>SimpleSource, который предоставляет базовые методы getter/setter для каждой свойства и реализует члены данных соответствующего типа свойства в заголовке. Здесь "<Type>" обозначает имя класса из файла .rep, поэтому, если ваш класс имеет тип "MyType" в файле .rep, то сгенерированный заголовочный файл будет объявлять класс MyTypeSimpleSource. Это быстрый способ начать работу с API. Для использования этого класса необходимо написать класс, который наследуется от него, и реализовать любые слоты, определённые в сгенерированном заголовочном файле как чистые виртуальные. Также необходимо добавить в свой класс необходимую логику для управления раскрытыми свойствами и отправки сигналов.

Если вам нужно скрыть детали реализации, используйте второй класс, объявленный в заголовочном файле, класс <Type>Source. Определение этого класса не содержит членов данных, а также делает функции getter/setter чистыми виртуальными. Хотя вам может потребоваться написать больше кода, использование этого класса даёт вам большую гибкость в реализации.

Третий класс, сгенерированный в заголовке, — <Type>SourceAPI. Это шаблонный класс, предназначенный для использования конкретно с шаблонной версией QRemoteObjectHostBase::enableRemoting(), которая позволяет использовать любой QObject, поддерживающий необходимый API, в качестве источника. Используйте этот класс для скрытия или преобразования свойств или параметров сигналов/слотов. Если ваша реализация не предоставляет правильный API, появятся предупреждения во время компиляции.

Примечание: Реплики и источники оба наследуются от QObject; но их API QObject никогда не раскрывается. Например, хотя у реплики есть сигнал destroyed, сигнал destroyed источника не передаётся. Источник и каждая его реплика являются уникальными QObject с собственными подключениями и жизненными циклами. Вместо этого API, который раскрывается, определяется шаблоном .rep используемым repc. В случае с сырыми QObject все элементы API определены в цепочке наследования от определённого предка. Родитель QObject всегда используется, если вы не определите Q_CLASSINFO("RemoteObject Type") в предке. Если вы используете Q_CLASSINFO("RemoteObject Type"), API этого класса является самым низким уровнем используемого API.

Идентификация источников

Поскольку у узла-хоста может быть несколько источников, каждый источник требует имени. Все заголовочные файлы, сгенерированные repc, содержат способ определения имени класса узлом: Q_CLASSINFO для типов реплики, simplesource или source; или статическая функция name() для типа SourceAPI. Если вы передаёте свой собственный тип QObject в QRemoteObjectHostBase::enableRemoting(), имя определяется следующим образом:

  • Имя может быть необязательно передано в QRemoteObjectHostBase::enableRemoting(). Если оно указано, используется это имя.
  • Если у объекта или любого его предка определён Q_CLASSINFO типа "RemoteObject Type", используется имя этого типа.
  • Если для объекта QObject задано свойство objectName, используется оно.
  • Если ни один из вышеперечисленных вариантов недоступен, вызов QRemoteObjectHostBase::enableRemoting() завершается неудачей, возвращая false.

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

Spec-Zone.ru

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