Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在HTML/Javascript和C++;以平台无关的方式在Qt网络频道中?_Javascript_Html_C++_Qt_Qwebview - Fatal编程技术网

如何在HTML/Javascript和C++;以平台无关的方式在Qt网络频道中?

如何在HTML/Javascript和C++;以平台无关的方式在Qt网络频道中?,javascript,html,c++,qt,qwebview,Javascript,Html,C++,Qt,Qwebview,对于台式机(Windows、Mac、Ubuntu),有一个QWebEngineView;对于手机(Android、iOS),有一个本机QWebView 不幸的是,。 例如,如下文所述: setWebChannel()可在QWebEnginePage中找到,该页面只能在QWebEngineView中访问。但是,QWebPage没有可在QWebView中访问的方法 现在,有另一种独立于平台的方式,可以在所有平台上运行,如中所述。 但是示例使用了,它只能与JSON一起使用。现在,JSON由于其过度描

对于台式机(Windows、Mac、Ubuntu),有一个
QWebEngineView
;对于手机(Android、iOS),有一个本机
QWebView

不幸的是,。
例如,如下文所述:

setWebChannel()
可在
QWebEnginePage
中找到,该页面只能在
QWebEngineView
中访问。但是,
QWebPage
没有可在
QWebView
中访问的方法

现在,有另一种独立于平台的方式,可以在所有平台上运行,如中所述。
但是示例使用了,它只能与
JSON
一起使用。现在,JSON由于其过度描述性的性质,如果C++模块位于服务器的某个地方,而HTML是本地的,则可能相当昂贵;i、 e.通过互联网进行真正的客户机-服务器通信。
如果他们使用protobuf,情况会更好

< Q>?<有没有从C++中调用HTML/JavaScript的优化和平台无关方法?p>
(注:BTW,当前调用J++的C++的QT方式非常方便,使用<代码>通道.Objs<代码>,我想保留这种方式。[Q/P>< P>用QWebChanter来通信C++和HTML/JS,QT目前使用JSON传输事件调用/数据(参见&)。在互联网上,与Google Protobuf相比,JSON可能会有发送字段名的开销,但与两种协议中的“无数据(字符串/文本)优化”相比,这应该可以忽略不计

< Q>?/P>中有没有从C++中调用HTML/JavaScript的优化和平台无关方法? 优化的方法是让Qt在QWebChannel AbstractTransport和JS(连接两端)中提供字符串/字节(而不是QJsonObject),这样我们就可以使用自定义协议进行传输

变通/替代解决方案(可能不是优化的方式)是使用Protobuf/自定义协议使用当前抽象进行传输,如下所示:

JS: 类似地,由于QWebChannel.js使用套接字,因此需要根据需要将套接字设置为二进制或文本,并根据Qt的需要将ProtoBuf/custom协议消息转换为json

关于在QWebchannel中使用Protobuf(需要预定义所有消息)/自定义协议的简单说明:

C++->WebSocketTransport(JSON到Protobuf/自定义协议)->传输->WebSocketJS(Protobuf/自定义协议到JSON)->(QWebChannel.JS)

JS->(QWebChannel.JS)->websocket JS(JSON到Protobuf/自定义协议)->传输->WebSocketTransport(Protobuf/自定义协议到JSON)->C++


注释:JS对对象(来自JSON或任何协议)进行工作,可能不需要如上所述的转换;但是这需要确定。

您检查过C++ <代码> QJSEngine < /C> >可以尝试包含“QWebChhanNe.js”。“如QWebChannel示例中所示直接创建文件。@Felix,
QWebChannel.js
的工作方式与Qn的第二部分所述相同。但是,它使用JSON。我们希望避免使用JSON,因为它过于描述性。因为如果GUI/JavaScript和client/C++用导线隔开,大量文本将通过internet传递。你是在暗示什么吗?是的,正如Qn中提到的。默认方式是使用Qt提供的自定义JSON方式。由于涉及大量函数调用,json在internet上的开销非常大。我们希望找到另一种Qt方法或技巧来确定除了JSON之外的更好的替代方案。但我还是对努力投了赞成票。:-)@iammilind:上述答案提供了另一种方法;有线传输将不是json,而是Protobuf/自定义协议,视需要而定
    In websockettransport.cpp (shared folder in examples)
        C++

        void WebSocketTransport::sendMessage(const QJsonObject &message)
        // Convert message from QJsonObject to Protobuf/custom protocol and
        // use m_socket->sendTextMessage or sendBinaryMessage as required


        void WebSocketTransport::textMessageReceived(const QString &messageData)
        //with QWebSocket::binary[ or text]MessageReceived slot, 
        //convert the message from client (in Protobuf/custom protocol) to 
        //JSON and still
        emit messageReceived(message.object(), this);