Model-View Server

Entwicklung eines einfachen Serverprogramms, das eine QTreeView anzeigt und Änderungen an ihr vornimmt, die in einem Remote Objects Netzwerk verfügbar gemacht wird.

Dies ist die serverseitige Anwendung, die den Model-View Client begleitet.

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

Wir beginnen damit, ein QRemoteObjectRegistryHost zu erstellen, mit dem sich andere Remote Objects verbinden, registriert werden und von dem dann Werbung gemacht wird. Das von uns erstellte Modell kann dann einfach von der Client-Seite aus erworben 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 Modell erstellen, das wir benötigen. Die genaue Implementierung finden Sie im Quellcode, den Sie über den Link weiter unten auf dieser Seite aufrufen können. Außerdem legen wir fest, welche Rollen wir dem Replikat auf der Client-Seite zur Verfügung stellen wollen.

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

Hier erstellen wir die QRemoteObjectHost, die sich mit der Registry, die wir zuvor erstellt haben, verbindet und alle ihre Remote-Objekte mit ihr teilt. Anschließend starten wir das Remoting des gerade erstellten Modells mit dem Namen RemoteModel. Auch hier übergeben wir 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 leicht zu halten, führt es einige automatisierte Aktionen durch, die das Modell kurz nach dem Start der Serveranwendung beeinflussen. Diese Änderungen sind dann sowohl auf der Server- als auch auf der Client-Seite 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

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