QRemoteObjectNode Class
Nodo de una red Qt Remote Objects. Más...
| Cabecera: | #include <QRemoteObjectNode> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects) |
| qmake: | QT += remoteobjects |
| En QML: | Node |
| Hereda de: | QObject |
| Heredado por: |
Tipos públicos
| enum | ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError } |
| RemoteObjectSchemaHandler |
Propiedades
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
Funciones públicas
| QRemoteObjectNode(QObject *parent = nullptr) | |
| QRemoteObjectNode(const QUrl ®istryAddress, 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) |
Señales
| void | heartbeatIntervalChanged(int heartbeatInterval) |
| void | remoteObjectAdded(const QRemoteObjectSourceLocation &loc) |
| void | remoteObjectRemoved(const QRemoteObjectSourceLocation &loc) |
Funciones protegidas reimplementadas
| virtual void | timerEvent(QTimerEvent *) override |
Descripción detallada
La clase QRemoteObjectNode proporciona un punto de entrada a una red QtRemoteObjects. Una red puede ser tan simple como dos nodos, o un conjunto arbitrariamente complejo de procesos y dispositivos.
Un QRemoteObjectNode no tiene una url a la que puedan conectarse otros nodos, por lo que sólo puede adquirir réplicas. No puede compartir objetos fuente (sólo pueden compartirlos los nodos QRemoteObjectHost y QRemoteObjectRegistryHost ).
Los nodos pueden conectarse entre sí directamente utilizando connectToNode, o pueden utilizar QRemoteObjectRegistry para simplificar las conexiones.
El QRemoteObjectRegistry es una réplica especial disponible para cada nodo que se conecta a la Url del Registro. Sabe cómo conectarse a cada objeto QRemoteObjectSource de la red.
Véase también QRemoteObjectHost y QRemoteObjectRegistryHost.
Documentación de tipos de miembros
enum QRemoteObjectNode::ErrorCode
Este tipo enum especifica los distintos códigos de error asociados a los errores de QRemoteObjectNode:
| Constante | Valor | Descripción |
|---|---|---|
QRemoteObjectNode::NoError | 0 | Sin error. |
QRemoteObjectNode::RegistryNotAcquired | 1 | No se ha podido adquirir el registro. |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | El registro ya está definido y alojando Fuentes. |
QRemoteObjectNode::NodeIsNoServer | 3 | El QRemoteObjectNode dado no es un nodo anfitrión. |
QRemoteObjectNode::ServerAlreadyCreated | 4 | El nodo anfitrión ya se ha inicializado. |
QRemoteObjectNode::UnintendedRegistryHosting | 5 | Se ha intentado crear un host QRemoteObjectNode y conectarse a él como registro. |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | La operación intentada no es válida en un cliente QRemoteObjectNode. |
QRemoteObjectNode::SourceNotRegistered | 7 | El QRemoteObjectSource dado no está registrado en este nodo. |
QRemoteObjectNode::MissingObjectName | 8 | El QObject dado no tiene objectName() establecido. |
QRemoteObjectNode::HostUrlInvalid | 9 | La url dada tiene un esquema inválido o no reconocido. |
QRemoteObjectNode::ProtocolMismatch | 10 | El cliente y el servidor tienen versiones de protocolo diferentes. |
QRemoteObjectNode::ListenFailed | 11 | No se puede escuchar en el puerto del host especificado. |
QRemoteObjectNode::SocketAccessError | 12 | El cliente no puede conectarse al servidor. Asegúrese de que QRemoteObjectHost::setLocalServerOptions está configurado correctamente. |
QRemoteObjectNode::RemoteObjectSchemaHandler
Typedef para un método std::function que puede tomar una entrada QUrl y es responsable de crear el canal de comunicaciones entre este nodo y el nodo que aloja la Fuente deseada. Como algunos tipos de QIODevices (por ejemplo, QSslSocket) requieren pasos adicionales antes de que el dispositivo esté listo para su uso, el método es responsable de llamar a addClientSideConnection una vez que la conexión está completamente establecida.
Documentación de propiedades
heartbeatInterval : int
Intervalo de heartbeat en ms.
El heartbeat (sólo útil para conexiones socket) enviará periódicamente un mensaje a los nodos conectados para detectar si la conexión se ha interrumpido. Qt Remote Objects intentará reconectarse automáticamente si detecta una conexión interrumpida. Esta función puede ayudar con esa detección ya que el cliente sólo detectará que el servidor no está disponible cuando intente enviar datos.
Un valor de 0 (el valor por defecto) desactivará el heartbeat.
Funciones de acceso:
| int | heartbeatInterval() const |
| void | setHeartbeatInterval(int interval) |
Señal notificadora:
| void | heartbeatIntervalChanged(int heartbeatInterval) |
persistedStore : QRemoteObjectAbstractPersistedStore*
Permite establecer una instancia QRemoteObjectAbstractPersistedStore para el nodo.
Permite a los miembros PROP de la réplica con el rasgo PERSISTED guardar su valor actual cuando se elimina la réplica y restaurar un valor almacenado la próxima vez que se inicie la réplica.
Requiere una implementación de la clase QRemoteObjectAbstractPersistedStore para controlar dónde y cómo se gestiona la persistencia.
Funciones de acceso:
| QRemoteObjectAbstractPersistedStore * | persistedStore() const |
| void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
Esta propiedad contiene la dirección de Registry utilizada por este nodo.
Es un QUrl vacío si no hay ningún registro en uso.
Funciones de acceso:
| QUrl | registryUrl() const |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
Documentación de funciones miembro
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
Constructor por defecto para QRemoteObjectNode con la dirección parent. Un Nodo construido de esta manera no puede ser conectado, y por lo tanto no puede exponer objetos Fuente en la red. Tampoco incluirá un QRemoteObjectRegistry, a menos que se establezca manualmente usando setRegistryUrl.
Véase también connectToNode y setRegistryUrl.
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
QRemoteObjectNode conectado a un {QRemoteObjectRegistry} {Registro}. Un Nodo construido de esta manera no puede ser conectado, y por lo tanto no puede exponer objetos Fuente en la red. Encontrar y conectarse a otros Nodos (Anfitriones) es manejado por el QRemoteObjectRegistry especificado por registryAddress.
Véase también connectToNode, setRegistryUrl, QRemoteObjectHost, y QRemoteObjectRegistryHost.
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
Devuelve un puntero a una Réplica de tipo ObjectType (que es un parámetro de plantilla y debe heredar de QRemoteObjectReplica). Es decir, el parámetro de plantilla debe ser un tipo generado por repc. El parámetro name puede utilizarse para especificar el name dado al objeto durante la llamada a QRemoteObjectHost::enableRemoting().
QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)
Devuelve un QRemoteObjectDynamicReplica de la Fuente name.
QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})
Devuelve un puntero a una Réplica que se deriva específicamente de QAbstractItemModel. El name proporcionado debe coincidir con el nombre utilizado con el enableRemoting coincidente que puso el Modelo en la red. action especifica si el modelo debe obtener datos antes de que se emita la señal initialized. Si se establece en QtRemoteObjects::PrefetchData, entonces los datos de los roles en el rolesHint serán pre-obtenidos. Si rolesHint está vacío, entonces los datos de todos los roles expuestos por la Fuente serán precargados.
El modelo devuelto estará vacío hasta que se inicialice con la Fuente.
void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
Para poder QRemoteObjectNode::acquire() Replicar objetos sobre QIODevices Externos, Qt Remote Objects necesita acceso al canal de comunicaciones (un QIODevice) entre los respectivos nodos. Es la llamada addClientSideConnection() la que permite esto, tomando el ioDevice como entrada. Cualquier llamada a acquire() realizada sin llamar a addClientSideConnection seguirá funcionando, pero el Nodo no podrá inicializar la Réplica sin que se le proporcione la conexión con el Nodo Anfitrión.
Véase también QRemoteObjectHostBase::addHostSideConnection.
[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)
Conecta un nodo cliente al nodo anfitrión en address.
Las conexiones seguirán siendo válidas hasta que el nodo anfitrión se elimine o deje de ser accesible a través de una red.
Una vez que un cliente está conectado a un host, se pueden adquirir réplicas válidas si la fuente correspondiente está siendo remotada.
Devuelve true en caso de éxito, false en caso contrario (normalmente una url no reconocida, o conexión a una dirección ya conectada).
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
template <typename T> QStringList QRemoteObjectNode::instances() const
Esta función de plantilla (que toma un tipo generado por repc como parámetro de plantilla) devolverá la lista de nombres de cada instancia de ese tipo en la red de Objetos Remotos. Por ejemplo, si tiene una clase Shape definida en un archivo .rep, y las clases Circle y Square heredan de la definición Source, pueden compartirse en la red de Objetos Remotos utilizando enableRemoting.
Square square; Circle circle; myHost.enableRemoting(&square, "Square"); myHost.enableRemoting(&circle, "Circle");
Entonces se puede utilizar instance para encontrar las instancias disponibles de 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
Esta función proporciona el mismo resultado que la versión con plantilla, pero toma el nombre de la clase Fuente como parámetro (typeName) en lugar de derivarlo del tipo de clase.
Esta función sobrecarga QRemoteObjectNode::instances().
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
Devuelve el último conjunto de errores.
void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
Proporcionar un método personalizado para manejar esquemas proporcionados externamente.
Este método está vinculado al Registro y a los Esquemas Externos. Registrando un manejador std::function para un esquema externo, el método registrado será llamado cuando el registro sea notificado de que una Fuente que ha adquirido está disponible. Sin este registro, QtRO sólo podría manejar los esquemas "incorporados".
El método proporcionado, handler, será llamado cuando el registro vea un objeto Fuente en un Nodo nuevo (aún no conectado) con un {QUrl::schema()} de schema. El handler, de tipo QRemoteObjectNode::RemoteObjectSchemaHandler obtendrá el QUrl del Nodo que proporciona la Fuente como parámetro de entrada, y es responsable de establecer el canal de comunicaciones (un QIODevice de algún tipo) y llamar a addClientSideConnection con él.
Véase también RemoteObjectSchemaHandler.
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
Devuelve un puntero al Nodo QRemoteObjectRegistry, si el Nodo está utilizando la función Registro; en caso contrario devuelve nullptr.
[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
Esta señal se emite cada vez que se añade un nuevo objeto Fuente al Registro. La señal no se emitirá si no hay ningún Registro establecido (es decir, Fuentes sobre conexiones realizadas a través de connectToNode directamente). El parámetro loc contiene la información sobre la Fuente añadida, incluido el nombre, el tipo y el QUrl del Nodo anfitrión.
Véase también remoteObjectRemoved() y instances().
[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
Esta señal se emite cada vez que se elimina del Registro un objeto Fuente conocido. La señal no se emitirá si no hay ningún Registro establecido (es decir, Fuentes sobre conexiones realizadas a través de connectToNode directamente). El parámetro loc contiene la información sobre la Fuente eliminada, incluido el nombre, el tipo y el QUrl del Nodo anfitrión.
Véase también remoteObjectAdded y instances.
[virtual] void QRemoteObjectNode::setName(const QString &name)
Establece name como el nombre interno de este Nodo. Este nombre se mostrará como parte del registro (si está activado). Esto es útil principalmente si fusiona datos de registro de múltiples nodos.
[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)
Reimplementa: QObject::timerEvent(QTimerEvent *event).
bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)
Bloquea hasta que el Registro de este Nodo es inicializado o timeout (en milisegundos) expira. Devuelve true si el Registro se inicializa correctamente, o false en caso contrario.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.