我正在使用Qt编写一个应用程序,想尝试将其部署为Web应用程序。 我希望用户能够通过web浏览器访问我的应用程序。 我猜这就是Web应用程序的作用? 我有哪些选择? 我从未尝试过任何类似的事情,但我想学习一些新东西。
编辑:如果我在Linux服务器上部署我的应用程序,并让用户通过终端访问/运行它会怎样?我认为编写Web应用程序比我最初想象的要复杂。
我正在使用Qt编写一个应用程序,想尝试将其部署为Web应用程序。 我希望用户能够通过web浏览器访问我的应用程序。 我猜这就是Web应用程序的作用? 我有哪些选择? 我从未尝试过任何类似的事情,但我想学习一些新东西。
编辑:如果我在Linux服务器上部署我的应用程序,并让用户通过终端访问/运行它会怎样?我认为编写Web应用程序比我最初想象的要复杂。
使用在Qt 5.10中引入的WebGL流式传输。Qt直接公开可连接浏览器的界面,无需第三方代码。
对于Qt 5.0-5.9,可以使用VNC平台插件。然后使用基于Web浏览器的VNC客户端进行连接。
尝试使用"Qt for Webassembly"。
Webassembly允许将C/C++代码编译并在大多数浏览器中本地运行:
WebAssembly(Wasm,WA)是一个网络标准,定义了一种二进制格式和相应的类似汇编的文本格式,用于Web页面中的可执行代码。...经过验证步骤后,在网络浏览器中的沙箱中执行。程序可以从高级语言编译为Wasm模块,并作为库从JavaScript小应用程序中加载...其最初的目标是支持从C和C ++编译,尽管对其他源语言的支持,如Rust和.NET语言也正在出现。
x86
Android ABI将其编译为Android,在服务器上运行Android模拟器,并向用户的浏览器提供Android Cast视频流。您还需要在网页客户端上设置JavaScript,以记录键盘和鼠标事件并将其传递回服务器。appetize.io。 这是一款商业产品,用于在网络上运行 Android 应用程序进行演示和测试。我刚刚使用了一个基于 Qt QML 的应用程序,并喜欢它的效果。选择 Android 9/10 设备时,您可以看到“屏幕转播”设置已开启;这就是我认为此解决方案使用 Android Cast 技术的原因。
runthatapp.com。 这是另一个商业服务提供商。虽然不像 appetize.io 那样复杂(但),但提供了一个不错的按需付费计划。
ScreenStream。 这是一个开源的 Android 应用程序,提供一个 Web 服务器来在 Web 浏览器中查看一个 Android 设备的屏幕,并依赖于 Android Cast 技术。该 Android 设备可以是在 Web 服务器上运行的模拟器。为了使其支持多用户,您可以采用类似于我为 Qt WebGL 流媒体开发的一种技术的小型负载均衡器。ScreenStream 的 README 显示,该应用程序可能会在短时间内每个客户端消耗高达 20 Mbit/s。
将您的Qt应用程序作为交互式实时视频流提供似乎是一个很有前途的想法,因为我发现它比VNC和类似的解决方案更少延迟。有方法可以使这个过程更快,例如使用硬件H.265视频编码器创建具有非常少延迟的视频流。通过在单个服务器上操作多个这样的编码器,服务器可以为多个客户提供服务,并仍然保持其CPU负载低。也许还有更好的视频格式可用于此类目的,因为程序的用户界面很容易进行无损压缩。
最后:由于我在过去几天中使用了appetize.io产品来运行Qt应用程序,因此以下是我的一些经验技巧:
需要为您的Qt应用程序编译x86
Android ABI。默认的 armeabi-v7a
ABI 将不起作用,因为大多数 appetize.io 设备实际上是基于服务器的 Android 模拟器,而唯一的基于 ARM 的设备(“Nexus 5 Physical”)无法启动我尝试使用它的任何 Qt 应用程序。screenOnly=true
,以显示没有手机或平板电脑图片的应用程序。pasteText(value)
、keypress(key, shiftKey)
和 openUrl(value)
。keypress(key, shiftKey)
消息类型。Qt 不支持编写基于浏览器的 Web 应用程序,遗憾。
您需要使用常见的 Web 编程技术来实现此功能。有很多方法,但 Qt 不是其中之一。