Modèle-Vue-Serveur

Développement d'un programme serveur simple qui affiche et modifie un QTreeView mis à disposition sur un réseau d'objets distants.

Il s’agit de l’application côté serveur qui accompagne le client Modèle-Vue.

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

Nous commençons par créer un registre d'objets ( QRemoteObjectRegistryHost ) auquel d'autres objets distants se connecteront, s'enregistreront, puis seront annoncés. Le modèle que nous créons peut ensuite être facilement récupéré côté client en se connectant simplement au registre.

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

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

Nous devons maintenant créer le modèle dont nous avons besoin. L’implémentation exacte est disponible dans le code source, auquel vous pouvez accéder en cliquant sur le lien situé plus bas sur cette page. Nous définissons également les rôles que nous souhaitons exposer à la réplique côté client.

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

Ici, nous créons l’ QRemoteObjectHost, qui se connecte au registre que nous avons créé précédemment et partage tous ses objets distants avec celui-ci. Nous lançons ensuite la communication à distance du modèle que nous venons de créer, nommé « RemoteModel ». Nous transmettons également ici l’argument « roles ».

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

Nous affichons ensuite le modèle à l’aide d’un widget QTreeView.

    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);

Afin de conserver la simplicité de cet exemple, celui-ci effectue certaines actions automatisées qui modifient le modèle peu après le lancement de l’application serveur. Ces modifications sont alors visibles aussi bien côté serveur que côté client. Vous pouvez également modifier le texte des champs côté serveur et voir la mise à jour s’effectuer côté client.

Exemple de projet sur 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.