QRemoteObjectNode Class

Qt Remote Objects 네트워크의 노드입니다. 더 보기...

헤더: #include <QRemoteObjectNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects)
qmake: QT += remoteobjects
QML에서: Node
상속합니다: QObject
상속 대상:

QRemoteObjectHostBase

공용 유형

enum ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError }
RemoteObjectSchemaHandler

속성

공공 기능

QRemoteObjectNode(QObject *parent = nullptr)
QRemoteObjectNode(const QUrl &registryAddress, 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 &registryAddress)
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이 없으므로 복제본만 획득할 수 있습니다. 소스 오브젝트를 공유할 수 없습니다( QRemoteObjectHostQRemoteObjectRegistryHost 노드만 공유 가능).

노드는 connectToNode 을 사용하여 서로 직접 연결하거나 QRemoteObjectRegistry 을 사용하여 연결을 간소화할 수 있습니다.

QRemoteObjectRegistry 은 레지스트리 URL에 연결하는 모든 노드에서 사용할 수 있는 특수 복제본입니다. 이 복제본은 네트워크의 모든 QRemoteObjectSource 객체에 연결하는 방법을 알고 있습니다.

QRemoteObjectHostQRemoteObjectRegistryHost도 참조하세요 .

멤버 유형 문서

enum QRemoteObjectNode::ErrorCode

이 열거형 유형은 QRemoteObjectNode 오류와 관련된 다양한 오류 코드를 지정합니다:

상수설명
QRemoteObjectNode::NoError0오류가 없습니다.
QRemoteObjectNode::RegistryNotAcquired1레지스트리를 가져올 수 없습니다.
QRemoteObjectNode::RegistryAlreadyHosted2레지스트리가 이미 정의되어 소스를 호스팅하고 있습니다.
QRemoteObjectNode::NodeIsNoServer3지정된 QRemoteObjectNode 은 호스트 노드가 아닙니다.
QRemoteObjectNode::ServerAlreadyCreated4호스트 노드가 이미 초기화되었습니다.
QRemoteObjectNode::UnintendedRegistryHosting5QRemoteObjectNode 호스트를 만들고 레지스트리로 연결하려고 시도했습니다.
QRemoteObjectNode::OperationNotValidOnClientNode6클라이언트 QRemoteObjectNode 에서 시도한 작업이 유효하지 않습니다.
QRemoteObjectNode::SourceNotRegistered7지정한 QRemoteObjectSource가 이 노드에 등록되어 있지 않습니다.
QRemoteObjectNode::MissingObjectName8지정된 QObjectobjectName()가 설정되어 있지 않습니다.
QRemoteObjectNode::HostUrlInvalid9지정한 URL에 유효하지 않거나 인식할 수 없는 체계가 있습니다.
QRemoteObjectNode::ProtocolMismatch10클라이언트와 서버의 프로토콜 버전이 다릅니다.
QRemoteObjectNode::ListenFailed11지정한 호스트 포트에서 수신할 수 없습니다.
QRemoteObjectNode::SocketAccessError12클라이언트가 서버에 연결할 수 없습니다. QRemoteObjectHost::setLocalServerOptions 이 올바르게 설정되었는지 확인하세요.

QRemoteObjectNode::RemoteObjectSchemaHandler

QUrl 입력을 받을 수 있고 이 노드와 원하는 소스를 호스팅하는 노드 간의 통신 채널을 생성하는 역할을 하는 std::함수 메서드의 경우 Typedef를 사용합니다. 일부 유형의 QIODevices(예: QSslSocket)는 장치를 사용할 준비가 되기 전에 추가 단계가 필요하므로 연결이 완전히 설정되면 이 메서드는 addClientSideConnection 을 호출하는 역할을 담당합니다.

속성 문서

heartbeatInterval : int

하트비트 간격(ms).

하트비트(소켓 연결에만 유용함)는 연결된 노드에 주기적으로 메시지를 보내 연결이 중단되었는지 여부를 감지합니다. Qt Remote Objects 연결이 끊어진 것을 감지하면 자동으로 다시 연결하려고 시도합니다. 이 기능은 클라이언트가 데이터를 보내려고 할 때만 서버를 사용할 수 없음을 감지하므로 이러한 감지에 도움이 될 수 있습니다.

0 (기본값)의 값은 하트비트를 비활성화합니다.

액세스 기능:

int heartbeatInterval() const
void setHeartbeatInterval(int interval)

알림 신호:

void heartbeatIntervalChanged(int heartbeatInterval)

persistedStore : QRemoteObjectAbstractPersistedStore*

노드에 대해 QRemoteObjectAbstractPersistedStore 인스턴스를 설정할 수 있습니다.

PERSISTED 특성이 있는 복제본 PROP 멤버가 복제본이 삭제될 때 현재 값을 저장하고 다음에 복제본을 시작할 때 저장된 값을 복원할 수 있도록 허용합니다.

지속성이 처리되는 위치와 방법을 제어하려면 QRemoteObjectAbstractPersistedStore 클래스 구현이 필요합니다.

액세스 함수:

QRemoteObjectAbstractPersistedStore *persistedStore() const
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

이 속성은 이 노드에서 사용하는 Registry 주소를 보유합니다.

사용 중인 레지스트리가 없는 경우 비어 있는 QUrl 입니다.

액세스 함수:

QUrl registryUrl() const
virtual bool setRegistryUrl(const QUrl &registryAddress)

멤버 함수 문서

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

지정된 parent 을 가진 QRemoteObjectNode의 기본 생성자. 이렇게 생성된 노드는 연결할 수 없으므로 네트워크에 소스 오브젝트를 노출할 수 없습니다. 또한 setRegistryUrl 을 사용하여 수동으로 설정하지 않는 한 QRemoteObjectRegistry 도 포함하지 않습니다.

connectToNodesetRegistryUrl도 참조하세요 .

QRemoteObjectNode::QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)

QRemoteObjectRegistry}에 연결된 QRemoteObjectNode {레지스트리}에 연결되었습니다. 이러한 방식으로 구성된 노드는 연결할 수 없으므로 네트워크에 소스 오브젝트를 노출할 수 없습니다. 다른 (호스트) 노드 찾기 및 연결은 registryAddress 에서 지정한 QRemoteObjectRegistry 에서 처리합니다.

connectToNode, setRegistryUrl, QRemoteObjectHost, QRemoteObjectRegistryHost도 참조 하세요.

template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())

(템플릿 매개 변수이며 QRemoteObjectReplica 에서 상속해야 하는) ObjectType 유형의 레플리카에 대한 포인터를 반환합니다. 즉, 템플릿 매개변수는 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 에서 특별히 파생된 레플리카에 대한 포인터를 반환합니다. 제공된 name모델을 네트워크에 배치한 enableRemoting 과 사용된 이름이 일치해야 합니다. action 은 모델이 initialized 신호가 전송되기 전에 데이터를 가져올지 여부를 지정합니다. QtRemoteObjects::PrefetchData 로 설정된 경우 rolesHint 에 있는 역할에 대한 데이터가 미리 가져오게 됩니다. rolesHint 이 비어 있으면 소스에 의해 노출된 모든 역할에 대한 데이터가 프리페치됩니다.

반환된 모델은 소스로 초기화될 때까지 비어 있습니다.

void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)

외부 QIODevices를 통해 개체를 QRemoteObjectNode::acquire() 복제하려면 Qt Remote Objects 각 노드 간의 통신 채널( QIODevice)에 액세스해야 합니다. 이를 가능하게 하는 것은 ioDevice 을 입력으로 받는 addClientSideConnection() 호출입니다. addClientSideConnection을 호출하지 않고 acquire() 호출은 계속 작동하지만 노드는 호스트 노드에 대한 연결이 제공되지 않으면 리플리카를 초기화할 수 없습니다.

QRemoteObjectHostBase::addHostSideConnection참조하세요 .

[invokable] 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

이 함수는 인스턴스()를 오버로드합니다.

이 편의 함수는 템플릿 버전과 동일한 결과를 제공하지만 클래스 유형에서 파생하는 대신 소스 클래스의 이름을 매개변수(typeName)로 사용합니다.

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

마지막 오류 집합을 반환합니다.

void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)

외부에서 제공된 스키마를 처리하는 사용자 정의 메서드 제공

이 메서드는 레지스트리외부 스키마에 연결됩니다. 외부 스키마에 대한 std::함수 핸들러를 등록하면 획득한 소스를 사용할 수 있다는 알림이 레지스트리에 수신될 때 등록된 메서드가 호출됩니다. 이 등록이 없으면 QtRO는 "내장" 스키마만 처리할 수 있습니다.

제공된 메서드인 handler 는 레지스트리가 아직 연결되지 않은 새 노드에서 {QUrl::schema()}가 schema소스 객체를 발견하면 호출됩니다. QRemoteObjectNode::RemoteObjectSchemaHandler 유형의 handler소스를 제공하는 노드의 QUrl 를 입력 파라미터로 가져와 통신 채널(일종의 QIODevice )을 설정하고 이를 통해 addClientSideConnection 을 호출하는 작업을 담당합니다.

RemoteObjectSchemaHandler도 참조하세요 .

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

노드가 레지스트리 기능을 사용하는 경우 노드의 QRemoteObjectRegistry 에 대한 포인터를 반환하고, 그렇지 않으면 nullptr 을 반환합니다.

[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)

이 신호는 새 소스 객체가 레지스트리에 추가될 때마다 발생합니다. 설정된 레지스트리가 없는 경우(즉, connectToNode 를 통해 직접 연결한 소스의 경우) 이 신호는 발생하지 않습니다. loc 매개변수에는 이름, 유형 및 호스팅 노드의 QUrl 등 추가된 소스에 대한 정보가 포함됩니다.

remoteObjectRemoved() 및 instances()도 참조하세요 .

[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

이 신호는 알려진 소스 객체가 레지스트리에서 제거될 때마다 발생합니다. 설정된 레지스트리가 없는 경우(즉, connectToNode 를 통해 직접 연결한 소스의 경우) 이 신호는 발생하지 않습니다. loc 매개변수에는 이름, 유형 및 호스팅 노드의 QUrl 등 제거된 소스에 대한 정보가 포함됩니다.

remoteObjectAddedinstances참조하세요 .

[virtual] void QRemoteObjectNode::setName(const QString &name)

name 을 이 노드의 내부 이름으로 설정합니다. 그러면 이 이름이 로깅의 일부로 출력됩니다(활성화된 경우). 여러 노드의 로그 데이터를 병합할 때 주로 유용합니다.

[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)

다시 구현합니다: QObject::timerEvent(Q타이머이벤트 *이벤트).

bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)

이 노드의 레지스트리가 초기화되거나 timeout (밀리초 단위)가 만료될 때까지 차단합니다. 반환 시 레지스트리가 성공적으로 초기화되면 true, 그렇지 않으면 false 을 반환합니다.

© 2025 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.