跟着例子学Qt--2.standalone( C++ QWebChannel server and a HTML/JS client)

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

前言

之前使用过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,分析起来比较绕,而WebSocket

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值