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 |
| 상속받는 클래스: |
공개 유형
| enum | 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) |
(since 6.12) void | persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore) |
(since 6.12) void | registryUrlChanged(const QUrl ®istryUrl) |
| 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 형식의 입력을 받을 수 있으며, 이 노드와 원하는 소스(Source)를 호스팅하는 노드 간의 통신 채널을 생성하는 역할을 하는 std::function 메서드에 대한 typedef입니다. 일부 유형의 QIODevice(예: 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) |
Notifier 신호:
| void | persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
이 속성은 이 노드가 사용하는 Registry 의 주소를 저장합니다.
사용 중인 레지스트리가 없는 경우, 이 속성은 빈 QUrl 입니다.
액세스 함수:
| QUrl | registryUrl() const |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
알림 신호:
| void | registryUrlChanged(const QUrl ®istryUrl) |
멤버 함수 문서
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
지정된 ` parent`을 사용하는 `QRemoteObjectNode`의 기본 생성자입니다. 이 방식으로 생성된 노드는 연결될 수 없으므로, 네트워크에 소스 객체를 노출할 수 없습니다. 또한 ` setRegistryUrl`을 사용하여 수동으로 설정하지 않는 한 ` QRemoteObjectRegistry`도 포함되지 않습니다.
connectToNode 및 setRegistryUrl도 참조하십시오 .
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
{QRemoteObjectRegistry} {Registry}에 연결된 QRemoteObjectNode. 이러한 방식으로 생성된 노드는 연결될 수 없으므로, 네트워크상에서 소스 객체를 노출할 수 없습니다. 다른 (호스트) 노드를 찾고 연결하는 작업은 registryAddress 에 명시된 QRemoteObjectRegistry 에 의해 처리됩니다.
connectToNode, setRegistryUrl, QRemoteObjectHost 및 QRemoteObjectRegistryHost도 참조하십시오 .
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
ObjectType(템플릿 매개변수이며 QRemoteObjectReplica 를 상속해야 함) 유형의 Replica에 대한 포인터를 반환합니다. 즉, 템플릿 매개변수는 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 는 모델을 네트워크에 배포한 해당 enableRemoting 에서 사용된 이름과 일치해야 합니다. action 는 initialized 신호가 발송되기 전에 모델이 데이터를 가져와야 하는지 여부를 지정합니다. 이 값이 QtRemoteObjects::PrefetchData 로 설정된 경우, rolesHint 에 포함된 역할에 대한 데이터가 미리 가져오게 됩니다. rolesHint 가 비어 있는 경우, Source가 노출하는 모든 역할에 대한 데이터가 미리 가져옵니다.
반환된 모델은 Source로 초기화될 때까지 비어 있습니다.
void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
외부 QIODevices를 통해 Replica 객체를 QRemoteObjectNode::acquire()하려면, Qt Remote Objects 는 해당 노드들 간의 통신 채널( QIODevice)에 접근할 수 있어야 합니다. 이를 가능하게 하는 것은 addClientSideConnection() 호출이며, 이 호출은 ioDevice 을 입력으로 받습니다. addClientSideConnection을 호출하지 않고 acquire()을 호출해도 작동은 하지만, 호스트 노드와의 연결이 제공되지 않으면 노드가 Replica를 초기화할 수 없습니다.
QRemoteObjectHostBase::addHostSideConnection도 참조하십시오 .
[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)
클라이언트 노드를 address 에 있는 호스트 노드에 연결합니다.
연결은 호스트 노드가 삭제되거나 네트워크를 통해 더 이상 접근할 수 없게 될 때까지 유효하게 유지됩니다.
클라이언트가 호스트에 연결되면, 해당 소스가 원격으로 전송되고 있는 경우 유효한 복제본을 획득할 수 있습니다.
성공 시 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다(일반적으로 인식할 수 없는 URL이거나 이미 연결된 주소에 연결하려는 경우).
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
template <typename T> QStringList QRemoteObjectNode::instances() const
이 템플릿 함수( repc로 생성된 타입을 템플릿 매개변수로 받는)는 Remote Objects 네트워크상에서 해당 타입의 모든 인스턴스 이름 목록을 반환합니다. 예를 들어, .rep 파일에 Shape 클래스가 정의되어 있고 Circle 및 Square 클래스가 Source 정의에서 상속된 경우, enableRemoting 를 사용하여 Remote Objects 네트워크에서 이를 공유할 수 있습니다.
Square square;
Circle circle;
myHost.enableRemoting(&square, "Square");
myHost.enableRemoting(&circle, "Circle");그런 다음 `instance`를 사용하여 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
이 편의 함수는 템플릿 버전과 동일한 결과를 제공하지만, 클래스 유형에서 파생하는 대신 Source 클래스의 이름을 매개변수로 받습니다(typeName).
이 함수는 ` QRemoteObjectNode::instances()`를 오버로드합니다.
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
마지막 오류 집합을 반환합니다.
[signal, since 6.12] void QRemoteObjectNode::persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)
이 신호는 persistedStore 속성이 persistedStore 로 변경될 때 발생합니다.
참고: 속성 ` persistedStore`에 대한알림 신호입니다.
이 함수는 Qt 6.12에서 도입되었습니다.
void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
외부에서 제공된 스키마를 처리하기 위한 사용자 정의 메서드 제공
이 메서드는 레지스트리 및 외부 스키마와 연동됩니다. 외부 스키마에 대한 std::function 핸들러를 등록하면, 사용자가 확보한 소스(Source) 가 사용 가능하다는 알림이 레지스트리에 전달될 때 등록된 메서드가 호출됩니다. 이 등록이 없으면 QtRO는 "내장" 스키마만 처리할 수 있습니다.
제공된 메서드인 ` handler`는 레지스트리가 schema 의 {QUrl::schema()}를 가진 새(아직 연결되지 않은) 노드에서 Source 객체를 감지할 때 호출됩니다. QRemoteObjectNode::RemoteObjectSchemaHandler 유형의 handler 는 Source를 제공하는 노드의 QUrl 를 입력 매개변수로 받아, 통신 채널(일종의 QIODevice )을 설정하고 이를 통해 addClientSideConnection 를 호출하는 역할을 담당합니다.
RemoteObjectSchemaHandler도 참조하십시오 .
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
노드가 레지스트리 기능을 사용하고 있는 경우, 해당 노드의 레지스트리 항목( QRemoteObjectRegistry)에 대한 포인터를 반환합니다. 그렇지 않은 경우, 레지스트리 항목이 없음을 나타내는 값( nullptr)을 반환합니다.
[signal, since 6.12] void QRemoteObjectNode::registryUrlChanged(const QUrl ®istryUrl)
이 신호는 registryUrl 속성이 registryUrl 로 변경될 때 발생합니다.
참고: 속성 ` registryUrl`에 대한알림 신호입니다.
이 함수는 Qt 6.12에서 도입되었습니다.
[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
이 신호는 새로운 Source 객체가 레지스트리에 추가될 때마다 발생합니다. 레지스트리 세트가 없는 경우(즉, connectToNode 를 통해 직접 설정된 연결상의 소스)에는 이 신호가 발생하지 않습니다. loc 매개변수에는 이름, 유형, 호스팅 노드의 QUrl 를 포함하여 추가된 Source에 대한 정보가 담겨 있습니다.
remoteObjectRemoved() 및 instances()도 참조하십시오 .
[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
이 신호는 알려진 Source 객체가 레지스트리에서 제거될 때마다 발생합니다. 레지스트리 세트가 없는 경우(즉, connectToNode 를 통해 직접 설정된 연결상의 Sources)에는 이 신호가 발생하지 않습니다. loc 매개변수에는 이름, 유형 및 호스팅 노드의 QUrl 를 포함하여 제거된 Source에 대한 정보가 담겨 있습니다.
remoteObjectAdded 및 instances도 참조하십시오 .
[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)
이 노드의 레지스트리가 초기화되거나 ` timeout `(밀리초 단위)가 만료될 때까지 차단합니다. 반환 시점에 레지스트리가 성공적으로 초기화된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false `를 반환합니다.
© 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.