我有一个用Qt实现的应用程序,它带有一些具有以下基本特征的c ++和python集成模块(机器学习,信号处理等):
QThread
)QwtPlotZoomer
,QwtPlotMarker
,QGraphicsRectItem
,QwtPlotCurve
提供可视化特性,例如2D绘图(not send images)。我的目标是通过具有多个个用户-观察者的Web浏览器应用程序,提供运行服务器的应用程序的已经实现的应用程序特征。我进行了一些研究,并在以下链接(Wt,link,link和{{上找到了一些可行的解决方案(Qt WebGL,Qt for Assembly,link) 3}}),但作为一个没有经验的Web应用程序开发人员,我不确定要使用哪个模块或替代的C++
模块。
请问您能否根据成熟度,功能,易用性和成熟度(Qt小部件的灵活性)等特征,就巫婆Web开发库提供一些使用建议和指导,还要考虑到我应用程序的特征?
谢谢。
PS:我想说一下,这对我在C ++和python而非Java和Javascript方面的经验是否有帮助?
答案 0 :(得分:1)
如果要制作一个可以使用Qt服务多个客户端的应用程序,则有3个常规选项:
这将创建一个纯服务器端的实现,并简单地在浏览器中远程显示GUI。这似乎是最简单的方法,但有一些限制和缺点:
总而言之,这种方法从未设计用于这种用例。它旨在用作无头设备或维护访问的GUI。我会不建议使用它。
将应用程序拆分为两个:服务器应用程序和客户端应用程序。具有Qt的WebAssembly客户端应用程序。两者之间的通信可以通过QtWebSockets
,QtRemoteObjects
或其他Network-IPC解决方案来完成。
这为您提供了仅使用一种语言的优势,并且使IPC非常容易,因为双方都使用Qt。同样,繁重的计算任务在WASM中效率更高。但是,Qt for WebAssembly仍处于技术预览状态,因此尚不稳定。例如,它尚不支持多线程或TCP / IP套接字。另外,到目前为止,并非所有终端设备都支持WASM。
最后一种方法是混合技术。使用Cutelyst之类的Web框架来创建基于Qt的Web服务器,并为其提供经典HTML网站。您可以使用QtWebChannel在Qt服务器和HTML客户端之间轻松地传输数据。
WASM和HTML客户端之间的决定取决于您。对您来说,使用WASM可能会更容易,但是它具有挑战性。我建议您在这两个方面做更多的研究。然后为这两种解决方案创建一些测试应用程序并进行比较,以找出最适合您需求的
答案 1 :(得分:0)
真的,我认为只有一件事:如果它开始崩溃,您可能需要其中之一:
https://doc.qt.io/qt-5/qmutex.html
对于Web脚本,我倾向于使用QWebEnginePage::runJavaScript()
,但要注意的是这并不容易。原因是,当从C ++注入javascript时,您正在处理c ++的单线程线性环境,这使得代码注入的时间和时间变得非常困难。从根本上讲,这是一个竞赛条件,我最终开发的serviceable model
只是在运行脚本直到获得期望的结果。
https://doc.qt.io/qt-5/qwebenginepage.html#runJavaScript
意思是,最好将任务委派给健壮的javascript应用程序。
最后,因为您正在使用Qt,所以开发一种“将所有内容创建为API”的心态是很好的。