模型-视图服务器
开发一个简单的服务器程序,该程序显示并对一个 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);
出于保持示例轻量级的考虑,它在服务器应用程序启动后不久执行一些自动操作以影响模型。然后可以在服务器和客户端端上看到这些更改。您也可以更改服务器端字段的文本,并在客户端端看到更新。
© 2024Qt 公司。本文件中包含的文档贡献是各自所有者的版权。本文件中提供的文档是根据免费软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及其相关标志是芬兰及其在全球的其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。