模型-视图服务器

开发一个简单的服务器程序,该程序显示并对一个 QTreeView 进行更改,该 QTreeView 可在远程对象网络中访问。

这是伴随 模型-视图客户端 的服务器端应用程序。

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

我们开始创建一个 QRemoteObjectRegistryHost,其他远程对象将通过它连接、注册并发起广告。我们创建的模型可以很容易地从客户端通过连接到注册表来获取。

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

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

现在我们必须创建所需的模型。具体的实现可以在源代码中找到,您可以通过在本页下方按下链接进行导航。我们还将定义我们想要向客户端的 副本公开哪些 roles

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

在此处,我们创建了一个 QRemoteObjectHost,它连接到我们之前创建的注册表,并将所有远程对象共享给它。然后我们开始使用名称 RemoteModel 遥程我们的模型。这里我们也传递了 roles 参数。

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

然后,我们使用 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);

出于保持示例轻量级的考虑,它在服务器应用程序启动后不久执行一些自动操作以影响模型。然后可以在服务器和客户端端上看到这些更改。您也可以更改服务器端字段的文本,并在客户端端看到更新。

示例项目 @ code.qt.io

© 2024Qt 公司。本文件中包含的文档贡献是各自所有者的版权。本文件中提供的文档是根据免费软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及其相关标志是芬兰及其在全球的其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。