Spec-Zone.ru › Qt

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

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

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

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

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

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

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

Дополнительную информацию о создании файла .rep, см. в разделе Формат файла rep.

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

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

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

Примечание: Реплики и источники оба наследуются от QObject; но их API QObject никогда не экспонируется. Например, хотя у реплики есть сигнал destroyed, сигнал destroyed источника не распространяется. Источник и каждая его реплика — уникальные QObjects со своими подключениями и жизненными циклами. Вместо этого API, который экспонируется, определяется шаблоном .rep используемым repc. В случае с исходными QObjects все элементы 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 типа "Тип удаленного объекта", используется это имя типа.
  • Если имя объекта QObject установлено, используется оно.
  • Если ни один из вышеперечисленных вариантов не доступен, вызов QRemoteObjectHostBase::enableRemoting() завершается неудачей, возвращая false.

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

Spec-Zone.ru

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