Класс QRemoteObjectNode
Узел в сети Qt Remote Objects. Подробнее...
| Заголовок: | #include <QRemoteObjectNode> |
| CMake: | find_package(Qt6 COMPONENTS RemoteObjects REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects) |
| qmake: | QT += remoteobjects |
| Создаётся из: | Узел |
| Наследует: | QObject |
| Наследуется: |
Типы публичного доступа
| перечисление | ErrorCode { НетОшибок, РегистрНеПолучен, РегистрУжеПрикреплён, УзелНеСервер, СерверУжеСоздан, …, ПодключениеНеУстановлено } |
| RemoteObjectSchemaHandler |
Свойства
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
Функции публичного доступа
| QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr) | |
| QRemoteObjectNode(QObject *parent = nullptr) | |
| ObjectType * | acquire(const QString &name = QString()) |
| QRemoteObjectDynamicReplica * | acquireDynamic(const QString &name) |
| QAbstractItemModelReplica * | acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {}) |
| void | addClientSideConnection(QIODevice *ioDevice) |
| bool | connectToNode(const QUrl &address) |
| int | heartbeatInterval() const |
| QStringList | instances() const |
| QStringList | instances(QStringView typeName) const |
| QRemoteObjectNode::ErrorCode | lastError() const |
| QRemoteObjectAbstractPersistedStore * | persistedStore() const |
| void | registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler) |
| const QRemoteObjectRegistry * | registry() const |
| QUrl | registryUrl() const |
| void | setHeartbeatInterval(int interval) |
| virtual void | setName(const QString &name) |
| void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
| bool | waitForRegistry(int timeout = 30000) |
Сигналы
| void | heartbeatIntervalChanged(int heartbeatInterval) |
| void | remoteObjectAdded(const QRemoteObjectSourceLocation &loc) |
| void | remoteObjectRemoved(const QRemoteObjectSourceLocation &loc) |
Переопределённые защищённые функции
| virtual void | timerEvent(QTimerEvent *) override |
Подробное описание
Класс QRemoteObjectNode предоставляет точку входа в сеть QtRemoteObjects. Сеть может быть простой (два узла) или сложной (множество процессов и устройств).
Узел QRemoteObjectNode не имеет URL, к которому могут подключаться другие узлы, и поэтому может получать только реплики. Он не может обмениваться исходными объектами (только узлы QRemoteObjectHost и QRemoteObjectRegistryHost могут обмениваться).
Узлы могут подключаться друг к другу напрямую с помощью connectToNode, или они могут использовать QRemoteObjectRegistry для упрощения подключения.
У всех узлов, подключённых к URL-адресу Регистра, есть специальная реплика QRemoteObjectRegistry. Она знает, как подключиться к каждому объекту QRemoteObjectSource в сети.
См. также QRemoteObjectHost и QRemoteObjectRegistryHost.
Документация по типам членов
перечисление QRemoteObjectNode::ErrorCode
Это перечисление определяет различные коды ошибок, связанные с ошибками QRemoteObjectNode:
| Константа | Значение | Описание |
|---|---|---|
QRemoteObjectNode::NoError |
0 |
Нет ошибки. |
QRemoteObjectNode::RegistryNotAcquired |
1 |
Регистр не может быть получен. |
QRemoteObjectNode::RegistryAlreadyHosted |
2 |
Регистр уже определён и содержит Источники. |
QRemoteObjectNode::NodeIsNoServer |
3 |
Указанный QRemoteObjectNode не является узлом-хостом. |
QRemoteObjectNode::ServerAlreadyCreated |
4 |
Узел-хост уже инициализирован. |
QRemoteObjectNode::UnintendedRegistryHosting |
5 |
Попытка создать узел-хост QRemoteObjectNode и подключиться к нему как к регистру. |
QRemoteObjectNode::OperationNotValidOnClientNode |
6 |
Попытка операции некорректна для клиентского узла QRemoteObjectNode. |
QRemoteObjectNode::SourceNotRegistered |
7 |
Указанный QRemoteObjectSource не зарегистрирован в этом узле. |
QRemoteObjectNode::MissingObjectName |
8 |
Указанный QObject не имеет установленного objectName(). |
QRemoteObjectNode::HostUrlInvalid |
9 |
Указанный URL имеет недопустимый или нераспознанный протокол. |
QRemoteObjectNode::ProtocolMismatch |
10 |
У клиента и сервера разные версии протокола. |
QRemoteObjectNode::ListenFailed |
11 |
Невозможно прослушивать указанный порт хоста. |
[since 5.12] QRemoteObjectNode::RemoteObjectSchemaHandler
Тип для метода std::function, который может принять QUrl в качестве входных данных и отвечает за создание канала связи между этим узлом и узлом, на котором размещён необходимый Источник. Поскольку некоторые типы QIODevices (например, QSslSocket) требуют дополнительных шагов перед тем, как устройство будет готово к использованию, метод отвечает за вызов addClientSideConnection, как только соединение будет полностью установлено.
Этот typedef был введён в Qt 5.12.
Документация по свойствам
heartbeatInterval : int
Интервал проверки работоспособности в мс.
Функция проверки работоспособности (полезная только для соединений через сокеты) периодически отправляет сообщения подключённым узлам, чтобы определить, не прервано ли соединение. Qt Remote Objects попытается автоматически повторно подключиться, если обнаружит разрыв соединения. Эта функция может помочь в обнаружении, так как клиент обнаружит, что сервер недоступен только тогда, когда попытается отправить данные.
Значение 0 (по умолчанию) отключит проверку работоспособности.
Функции доступа:
| int | heartbeatInterval() const |
| void | setHeartbeatInterval(int interval) |
Сигнал уведомления:
| void | heartbeatIntervalChanged(int heartbeatInterval) |
[since 5.11] persistedStore : QRemoteObjectAbstractPersistedStore*
Позволяет установить экземпляр QRemoteObjectAbstractPersistedStore для узла.
Позволяет сохранять значения свойств реплик с атрибутом PERSISTED при удалении реплики и восстанавливать сохранённые значения при следующем запуске реплики.
Требует реализацию класса QRemoteObjectAbstractPersistedStore для управления тем, где и как обрабатывается сохранение.
Это свойство было введено в Qt 5.11.
Функции доступа:
| QRemoteObjectAbstractPersistedStore * | persistedStore() const |
| void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
Это свойство содержит адрес Реестра, используемого этим узлом.
Это пустой QUrl, если реестр не используется.
Функции доступа:
| QUrl | registryUrl() const |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
Документация по функциям-членам
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
QRemoteObjectNode, подключённый к {QRemoteObjectRegistry} {Регистру}. Узел, созданный таким образом, не может быть подключён и, следовательно, не может экспонировать объекты Source в сети. Поиск и подключение к другим узлам (узлам-хостам) обрабатывается QRemoteObjectRegistry, указанным параметром registryAddress.
См. также connectToNode, setRegistryUrl, QRemoteObjectHost и QRemoteObjectRegistryHost.
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
Конструктор по умолчанию для QRemoteObjectNode с заданным parent. Узел, созданный таким образом, не может быть подключён и, следовательно, не может экспонировать объекты Source в сети. Он также не будет включать QRemoteObjectRegistry, если не установлен вручную с помощью setRegistryUrl.
См. также connectToNode и setRegistryUrl.
[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
Этот сигнал излучается всякий раз, когда новый объект Источник добавляется в Реестр. Сигнал не будет излучаться, если реестр не задан (т. е. Источники по соединениям, созданным с помощью connectToNode напрямую). Параметр loc содержит информацию о добавленном Источнике, включая имя, тип и QUrl узла-хоста.
См. также remoteObjectRemoved() и instances().
[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
Этот сигнал излучается всякий раз, когда известный объект Источник удаляется из Реестра. Сигнал не будет излучаться, если реестр не задан (т. е. Источники по соединениям, созданным с помощью connectToNode напрямую). Параметр loc содержит информацию об удалённом Источнике, включая имя, тип и QUrl узла-хоста.
См. также remoteObjectAdded и instances.
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
Возвращает указатель на реплику типа ObjectType (который является параметром шаблона и должен наследоваться от QRemoteObjectReplica). То есть, параметр шаблона должен быть типом, сгенерированным с помощью repc. Параметр name может быть использован для указания имени, присвоенного объекту во время вызова QRemoteObjectHost::enableRemoting().
QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)
Возвращает QRemoteObjectDynamicReplica источника name.
QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})
Возвращает указатель на Replica, который конкретно выводится из QAbstractItemModel. Указанное значение name должно совпадать с именем, используемым в сопоставляемом вызове enableRemoting, который помещает Model в сеть. Значение action указывает, следует ли модели извлекать данные до выдачи сигнала initialized. Если оно установлено в значение QtRemoteObjects::PrefetchData, данные для ролей в rolesHint будут предварительно загружены. Если rolesHint пусто, данные для всех ролей, экспонированных Source, будут предварительно загружены.
Возвращаемая модель будет пустой, пока она не будет инициализирована с помощью Source.
[since 5.12] void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
Для получения доступа к объектам Replica через External QIODevices, Qt Remote Objects нуждается в доступе к каналу связи (a QIODevice) между соответствующими узлами. Это достигается вызовом addClientSideConnection(), принимающим ioDevice в качестве входного параметра. Любой вызов acquire() без вызова addClientSideConnection все равно будет работать, но узел не сможет инициализировать Replica без предоставления подключения к узлу Host.
Данная функция была добавлена в Qt 5.12.
См. также QRemoteObjectHostBase::addHostSideConnection.
[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)
Подключает клиентский узел к узлу хоста по адресу address.
Подключения остаются действительными до удаления узла хоста или пока он больше недоступен через сеть.
После подключения клиента к хосту можно получить доступ к valid Replicas, если соответствующий Source удалён.
Возвращает true при успехе, false в противном случае (обычно нераспознанный URL или подключение к уже подключенному адресу).
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
template <typename T> QStringList QRemoteObjectNode::instances() const
Эта шаблонная функция (принимающая тип, сгенерированный repc, в качестве параметра шаблона) вернёт список имён каждого экземпляра данного типа в сети Qt Remote Objects. Например, если у вас есть класс Shape, определённый в файле .rep, и классы Circle и Square наследуют от определения Source, они могут быть объединены в сеть Qt Remote Objects с помощью enableRemoting.
Square square; Circle circle; myHost.enableRemoting(&square, "Square"); myHost.enableRemoting(&circle, "Circle");
Затем экземпляр можно использовать для поиска доступных экземпляров Shape.
QStringList instances = clientNode.instances<Shape>();
// will return a QStringList containing "Circle" and "Square"
auto instance1 = clientNode.acquire<Shape>("Circle");
auto instance2 = clientNode.acquire<Shape>("Square");
... QStringList QRemoteObjectNode::instances(QStringView typeName) const
Эта функция перегружает instances().
Эта вспомогательная функция предоставляет тот же результат, что и шаблонная версия, но принимает имя класса Source в качестве параметра (typeName) вместо получения его из типа класса.
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
Возвращает последнюю ошибку.
[since 5.12] void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
Предоставляет пользовательский метод для обработки внешних схем.
Этот метод связан с Registry и External Schemas. Регистрируя std::function обработчик для внешней схемы, зарегистрированный метод будет вызываться, когда реестр уведомлён о доступности Source, который вы получили. Без этой регистрации QtRO сможет обрабатывать только "встроенные" схемы.
Предоставленный метод handler будет вызываться, когда реестр обнаружит объект Source на новом (ещё не подключенном) узле с {QUrl::schema()} равным schema. Метод handler, типа QRemoteObjectNode::RemoteObjectSchemaHandler, получит QUrl узла, предоставляющего Source, в качестве входного параметра и отвечает за установление канала связи (QIODevice какого-либо типа) и вызов addClientSideConnection с ним.
Данная функция была добавлена в Qt 5.12.
См. также RemoteObjectSchemaHandler.
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
Возвращает указатель на QRemoteObjectRegistry узла, если узел использует функцию реестра; в противном случае возвращает nullptr.
[virtual] void QRemoteObjectNode::setName(const QString &name)
Устанавливает name в качестве внутреннего имени для этого узла. Затем это имя отображается в логах (если включены). Это преимущественно полезно, если вы объединяете данные логов из нескольких узлов.
[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)
Переопределяет: QObject::timerEvent(QTimerEvent *event).
bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)
Задерживает выполнение, пока реестр Registry этого узла не будет инициализирован или не истечёт timeout (в миллисекундах). Возвращает true при успешной инициализации Registry, или false в противном случае.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qremoteobjectnode.html