QML 应用程序中的客户端实现

Client implementation within QML application

我正在使用 QML 文件开发应用程序,这些文件会根据来自服务器的数据定期更新。

我有一个自定义的 TCPClient class,我需要实现它才能收听服务器的回答。

这是它的样子:

tcp_client.loop()
   getDataFromServer()
   updateCurrentQMLPage(data)

QML 页面会自动切换。

我正在考虑将我的 class 设置为上下文优先级:

QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("tcp_client", TCPClient::get()); // static pointer

作为 QML 应用程序的初学者,我想知道这是否会使我的 class 依赖于 QML 代码,以及上面介绍的算法是否可行。

有没有更好的方法来实现这个?

我不知道我是否完全理解你要做什么,但这可能是在qml中注册一个QObject派生的C++class来实现TCP套接字的使用并在 qml 中声明所述 class 的一个对象(或者可能是多个对象,具体取决于你的情况)。这样你就可以在 qml 中使用 C++ 声明的属性、函数和 signals/slots。 This page 有一些链接可以提供帮助,因为 C++/qml 交互可以通过多种方式完成。

我现在正在使用类似的方法,但我的后端侦听命名管道以获取包含 protobuf 格式数据的消息,而不是 TCP 套接字。我在 C++ 中有一个 class,它聚合了一个 QLocalSocket(管道),每次有新数据可用时,消息都会被解析并作为信号中的参数传递给 qml。 (qml 对象甚至有一个为所述信号自动生成的插槽)。