前言
之前使用过QWebChannel来沟通html/js及c++代码,其中很多也不是很了解,当时的使用目的就是将网页内嵌展示,即相当于展示一个本地网页,并在其中暴露一些c++接口,不牵涉到socket的相关通讯。当时理解得很浅,如今恰巧看到Qt有一个关于QWebChannel的例子,代码量不大却几乎完美地阐述了其中的机制,遂细分析之。
概述
其实仔细看分析的Qt standalone示例和我当初使用的方式并不完全相同。standalone中并没有通过QWebEngineView展示网页,这个示例展示的是一个服务器端运用的方式,最后使用QDesktopServices::openUrl打开一个网页而已。
分析主要脉络
QWebSocketServer server(QStringLiteral("QWebChannel Standalone Example Server"), QWebSocketServer::NonSecureMode);
if (!server.listen(QHostAddress::LocalHost, 12345)) {
// 这里让服务器监听端口12345
qFatal("Failed to open web socket server.");
return 1;
}
// 后面需要改写这段
WebSocketClientWrapper clientWrapper(&server);
QWebChannel channel;
QObject::connect(&clientWrapper, &WebSocketClientWrapper::clientConnected,
&channel, &QWebChannel::connectTo);
// 后面需要改写这段
Dialog dialog;
channel.registerObject(QStringLiteral("dialog"), &dialog); // 将c++对象暴露到chanel中,于是可以在html/js中访问该c++对象
由于WebSocketClientWrapper 内部还包含了一个自定义的类WebSocketTransport,分析起来比较绕,而WebSocketClientWrapper 干的事情很少,故
Qt实战:QWebChannel服务器与HTML/JS客户端通信解析

本文详细分析了Qt的QWebChannel在standalone模式下的应用,探讨了其作为C++服务器与HTML/JS客户端通信的机制。通过简化代码,展示了WebSocketTransport类的工作原理,强调了JSON格式在通信中的作用。同时指出,由于所有客户端共享同一服务器对象,可能导致消息广播问题,需要进一步定制以适应多个独立客户端的需求。
最低0.47元/天 解锁文章
2166

被折叠的 条评论
为什么被折叠?



