QtWebEngine使用IPC机制在C + Qt世界和JavaScript作品之间进行通信。此机制用于QWebChannel,它似乎基于WebSockets。有没有一种方法可以使用基础IPC或WebSocket而不使用QWebChannel,因为后者似乎仅限于字符串或JSON编码的数据?
背景:我编写了一个应用程序QtDomTerm,它是一个基于JavaScript的终端仿真器,它使用QWebChannel将PTY的输入/输出连接到QtWebEngine。这工作得很好,但是存在与utf8 /字符串转换有关的故障。理想情况下,我想从PTY发送原始字节,并在JavaScript中进行字节到文本的转换。但是QWebChannel太高级,只能处理字符串或JSON编码的数据。它不处理QByteArray。
当然,有多种方法可以解决我的问题。一种是手动创建WebSocket服务器,并使运行在QtWebEngine中的JavaScript连接到该服务器。但是似乎使用qt.webChannelTransport
仍然是幕后工作。如果可以访问基础传输,这似乎是最高效,最优雅的方法(类WebChannelIPCTransportHost
似乎是相关的)。
任何人都尝试过这样的事情吗?即我不想使用QWebChannel-除非有一种有效的方法让它传递QByteArray。
(我改掉了这个问题。有人对缺少的研究发表评论,但是我在Qt文档,源代码和此处进行了大量浏览,但没有找到明确的答案。)
最佳答案
是什么使您无法发送QString::fromLatin1(data.toHex())
,而data
是QByteArray
类型的呢?真的,这就是您所需要的。在JavaScript端使用反向转换,例如this question。