QRemoteObjectNode 类
Qt 远程对象网络的节点。 更多...
头文件 | #include <QRemoteObjectNode> |
CMake | find_package(Qt6 REQUIRED COMPONENTS RemoteObjects) target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects) |
qmake | QT += remoteobjects |
实例化自 | Node |
继承 | QObject |
继承自 |
公共类型
枚举 | ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError } |
RemoteObjectSchemaHandler |
属性
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
公共函数
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) |
信号
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来简化连接。
QRemoteObjectRegistry 是一个对每个连接到注册表URL的节点都可用的特殊副本。它知道如何连接到网络上的每个 QRemoteObjectSource 对象。
另请参阅QRemoteObjectHost 和 QRemoteObjectRegistryHost。
成员类型文档
enum 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 | 无法监听指定的主机端口。 |
QRemoteObjectNode::SocketAccessError | 12 | 客户端不允许连接到服务器。请确保已适当地设置QRemoteObjectHost::setLocalServerOptions。 |
QRemoteObjectNode::RemoteObjectSchemaHandler
用于接受QUrl输入的std::function方法的类型定义,负责创建此节点与承载所期望的Source节点的通信通道。由于某些类型的QIODevices(例如,QSslSocket)在使用前需要额外的步骤,此方法负责在连接完全建立后调用addClientSideConnection。
属性文档
heartbeatInterval : int
心跳间隔(以毫秒为单位)。
心跳(对于套接字连接有用)将定期向已连接节点发送消息,以检测连接是否中断。Qt远程对象会在检测到连接丢失时尝试自动重新连接。此函数可以帮助检测这一点,因为客户端只有在尝试发送数据时会检测到服务器不可用。
0
(默认值)将禁用心跳。
访问函数
int | heartbeatInterval() const |
void | setHeartbeatInterval(int interval) |
通知信号
void | heartbeatIntervalChanged(int heartbeatInterval) |
persistedStore : QRemoteObjectAbstractPersistedStore*
允许为节点设置一个QRemoteObjectAbstractPersistedStore实例。
允许复制PROP
成员具有PERSISTED属性,以便在复制被删除时保存其当前值,并且在复制下一次启动时恢复存储的值。
需要QRemoteObjectAbstractPersistedStore类的实现来控制持久性在哪里以及如何处理。
访问函数
QRemoteObjectAbstractPersistedStore * | persistedStore() const |
void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
此属性包含此节点使用的Registry的地址。
如果没有使用注册表,则为空的QUrl。
访问函数
QUrl | registryUrl() const |
virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
成员函数文档
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
具有给定parent的QRemoteObjectNode的默认构造函数。以这种方式构建的节点无法连接,因此无法在网络上公开Source对象。它也不会包含QRemoteObjectRegistry,除非使用setRegistryUrl手动设置。
另请参阅connectToNode和setRegistryUrl。
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
连接到QRemoteObjectRegistry的Registry的QRemoteObjectNode。以这种方式构建的节点无法连接,因此无法在网络上公开Source对象。找到并连接到其他(主机)节点由指定的registryAddress的QRemoteObjectRegistry处理。
也参见 connectToNode、setRegistryUrl、QRemoteObjectHost 以及 QRemoteObjectRegistryHost。
<typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
返回一个类型为 ObjectiveType(这是一个模板参数,必须继承自 QRemoteObjectReplica)的副本指针。也就是说,模板参数必须是一个由 -repc 生成的类型。可以使用 name 参数来指定在 QRemoteObjectHost::enableRemoting() 调用期间给对象指定的 name。
QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)
返回源 name 对应的 QRemoteObjectDynamicReplica。
QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name,QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize,const QList< int> &rolesHint = {})
返回一个特定由 QAbstractItemModel 派生的 Replica 指针。提供的 name 必须与将 Model 放入网络匹配的 enableRemoting() 使用的 name 匹配。action 指定模型是否在发出 initialized 信号之前加载数据。如果设置为 QtRemoteObjects::PrefetchData,则预先加载 rolesHint 中角色的数据。如果 rolesHint 为空,则将预先加载 Source 曝光的全部角色的数据。
返回的模型将在使用 Source 初始化之前为空。
void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
为了通过 External QIODevices 使用 QRemoteObjectNode::acquire() 访问 Replica 对象,Qt Remote Objects 需要访问节点之间的通信通道(一个 QIODevice)。使用 ioDevice 作为输入的 addClientSideConnection() 调用可以启用此功能。在未调用 addClientSideConnection 的情况下进行任何 acquire() 调用仍将工作,但节点将无法在没有提供到主机节点的连接的情况下初始化 Replica。
也参见 QRemoteObjectHostBase::addHostSideConnection。
[可调用]
bool QRemoteObjectNode::connectToNode(const QUrl &address)
将客户端节点连接到位于 address 的主机节点。
连接将持续有效,直到主机节点被删除或无法通过网络访问。
一旦客户端连接到主机,如果相应的源正在远程操作,则可以获取有效的副本。
成功返回 true
,否则返回 false
(通常是不认识的URL或连接到已连接的地址)。
注意:此函数可以通过元对象系统从QML调用。请参阅 Q_INVOKABLE。
template <typename T> QStringList QRemoteObjectNode::instances() const
该模板函数(使用作为模板参数的由repc生成的类型)将返回远程对象网络上该类型每个实例的名称。例如,如果你在.rep文件中定义了一个Shape类,并且Circle和Square类从源定义中继承,则可以使用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
此函数重载了instance()。
这个便利函数提供与模板版本相同的结果,但将源类名称(typeName)作为参数,而不是从类类型中推导。
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
返回设置的最后一个错误。
void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
提供自定义方法来处理外部提供的模式
此方法与注册表和外部模式关联。通过为外部模式注册std::function处理器,当注册表通知您已获取的源可用时,将调用注册的方法。不进行此注册,QtRO将只能处理“内置”的模式。
提供的handler方法在注册表看到带有{QUrl::schema()}的schema的新(尚未连接的)节点上的Source对象时将被调用。类型为QRemoteObjectNode::RemoteObjectSchemaHandler的handler将获取提供Source的节点的QUrl作为输入参数,负责建立通信通道(某种类型的QIODevice)并用它调用addClientSideConnection。
另请参阅:RemoteObjectSchemaHandler。
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
如果节点正在使用注册表功能,则返回节点QRemoteObjectRegistry的指针;否则返回nullptr
。
[信号]
void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
每当一个新的 源 对象添加到注册表时,都会发出此信号。如果没有设置注册表(即通过 connectToNode 直接连接的源),则不会发出信号。参数 loc 包含有关已添加源的详细信息,包括名称、类型和宿主节点的 QUrl。
另请参阅remoteObjectRemoved() 和 instances。
[信号]
void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
每当从注册表中移除已知的 源 对象时,都会发出此信号。如果没有设置注册表(即通过 connectToNode 直接连接的源),则不会发出信号。参数 loc 包含有关移除的源的详细信息,包括名称、类型和宿主节点的 QUrl。
另请参阅remoteObjectAdded 和 instances。
[虚拟]
void QRemoteObjectNode::setName(const QString &name)
将 name 设置为该节点的内部名称。然后将其输出为日志的一部分(如果已启用)。这在从多个节点合并日志数据时非常有用。
[覆盖虚拟受保护]
void QRemoteObjectNode::timerEvent(QTimerEvent *)
重新实现了: QObject::timerEvent(QTimerEvent *event).
bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)
阻塞,直到此节点的 注册表 初始化完成或 timeout(以毫秒为单位)到期。如果返回时注册表成功初始化,则返回 true
,否则返回 false
。
© 2024 Qt 公司。此处包含的文档贡献的版权属于其各自的拥有者。此处提供的文档受 GNU 自由文档许可证版本 1.3 的许可,由自由软件基金会发布。Qt 和相应的标志是芬兰和/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。