Model-View-Server

Entwicklung eines einfachen Serverprogramms, das eine QTreeView anzeigt und ändert, die in einem Remote-Objects-Netzwerk bereitgestellt wird.

Dies ist die serverseitige Anwendung, die den Model-View-Client ergänzt.

    QRemoteObjectRegistryHost node(QUrl(QStringLiteral("local:registry")));

Zunächst erstellen wir eine „ QRemoteObjectRegistryHost “, mit der sich andere Remote-Objekte verbinden, registrieren lassen und anschließend bekannt gegeben werden. Das von uns erstellte Modell kann dann ganz einfach von der Client-Seite abgerufen werden, indem eine Verbindung zur Registrierung hergestellt wird.

    std::unique_ptr<QStandardItemModel> sourceModel = createModel();

    QList<int> roles;
    roles << Qt::DisplayRole << Qt::BackgroundRole;

Nun müssen wir das benötigte Modell erstellen. Die genaue Implementierung ist im Quellcode verfügbar, zu dem Sie gelangen, indem Sie auf den weiter unten auf dieser Seite befindlichen Link klicken. Außerdem legen wir fest, welche Rollen wir dem Replica auf der Client-Seite zur Verfügung stellen möchten.

    QRemoteObjectHost node2(QUrl(QStringLiteral("local:replica")), QUrl(QStringLiteral("local:registry")));
    node2.enableRemoting(sourceModel.get(), QStringLiteral("RemoteModel"), roles);

Hier erstellen wir die „ QRemoteObjectHost “, die eine Verbindung zu der zuvor erstellten Registry herstellt und alle ihre Remote-Objekte mit dieser teilt. Anschließend starten wir die Remote-Bereitstellung des soeben erstellten Modells unter dem Namen „ RemoteModel “. Dabei übergeben wir auch das Argument „roles “.

    QTreeView view;
    view.setWindowTitle(QStringLiteral("SourceView"));
    view.setModel(sourceModel.get());
    view.show();

Anschließend zeigen wir das Modell mit einem „QTreeView“-Widget an.

    TimerHandler handler;
    handler.model = sourceModel.get();
    QTimer::singleShot(5000, &handler, &TimerHandler::changeData);
    QTimer::singleShot(10000, &handler, &TimerHandler::insertData);
    QTimer::singleShot(11000, &handler, &TimerHandler::changeFlags);
    QTimer::singleShot(12000, &handler, &TimerHandler::removeData);
    QTimer::singleShot(13000, &handler, &TimerHandler::moveData);

Um das Beispiel überschaubar zu halten, führt es kurz nach dem Start der Serveranwendung einige automatisierte Aktionen durch, die sich auf das Modell auswirken. Diese Änderungen sind dann sowohl auf der Server- als auch auf der Clientseite zu sehen. Sie können auch den Text in den Feldern auf der Serverseite ändern und sehen, wie er auf der Clientseite aktualisiert wird.

Beispielprojekt @ code.qt.io

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