Qt嵌入浏览器—QWebEngineView实现浏览器基本功能(内含代码例子)

要求:Qt升级到5.7.1之后,前面的Qt版本有bug(在刷新页面后,页面会丢失window.qt对象)

1、所需功能模块:

用到Qt的模块:QWebEngineView、QWebChannel

自己衍生出一个Js模块:JsContext(继承于QObject)

2、简单介绍下模块的功能:

(1)QWebEngineView,web view是Qt WebEngine web浏览模块的主要组件。它可以在各种应用程序中显示来自互联网的实时web内容。

(2)QWebChannel:为了实现页面向浏览器发送消息,需要在一定程度上实现在页面中访问Qt对象。(Qt官方的推荐方式)

填补了c++应用程序和HTML/JavaScript应用程序之间的空白。不需要手动传递消息和序列化数据,c++端上的属性更新和信号发射会自动传输到可能远程运行的HTML客户机。在客户端,将为任何发布的c++ QObject创建一个JavaScript对象。

它反映了c++对象的API,因此可以直观地使用。

唯一的限制是HTML客户机支持qwebchannel.js使用的JavaScript特性。因此,基本上可以与任何现代HTML浏览器或独立的JavaScript运行时(如node.js)进行交互。

借助官方提供的qwebchannel.js脚本,可以很方便地实现页面对Qt对象的调用,同时便于实现C++和html/js的解耦,方便使用不同技术栈的开发人员的分工。

注:qwebchannel.js在Qt发布版的文件夹下可以找到。(找出放置与XXX.html文件同一级目录,否则容易关联不到QWebChannel

(3)通过JsContext,webCommunication 这个实现web site与客户端进行交互。

3、梳理下几者之间的关系

4、代码(话不多说,直接上代码)

(1)先设计一个JsContext类

(2)在主程序中定义三个变量

    QWebEngineView *m_webView = nullptr;
    QWebChannel *m_webChannel = nullptr;
    JsContext *m_jsContext = nullptr;

步骤:

m_webChannel

1)创建QWebChannel对象;

2)向QWebChannel对象注册Qt对象。 例子里的Qt对象就是上面实现的JsContext对象。

注意:这里注册时所用的名字“context”,就是js获取qt对象时所使用的索引名。

3)将设置好的QWebChannel对象设置为当前页面的通道。即调用QWebEnginePage的setWebChannel方法。

m_webView

m_webView->load(QUrl::fromLocalFile("E:\\project\\QtWeb\\QtWeb\\test.html"));

此路径就是一个HTML的页面路径;

(3)准备一个test.js文件,以及test.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>webchannel</title>

</head>

<body>

    <meta charset="UTF-8">

    <p>webchannel test</p>

    <script type="text/javascript" src="./qwebchannel.js"></script>

    <script type="text/javascript" src="./test.js"></script>

    <input id="Message to be sent" type="text" name="msgText" />

    <input type="button" value="Send a message to the browser" οnclick="onBtnSendMsg()" />

</body>

</html>

 

5、交互相关的代码

6、呈现的结果是:

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
QCEFView是基于Qt和Chromium Embedded Framework(CEF)的浏览器控件。它可以在Qt应用程序中嵌入一个完整的浏览器窗口,允许用户浏览网页、执行JavaScript代码等。 QCEFView的优势之一是它能够提供高性能的网页渲染和JavaScript执行。由于基于CEF,它可以利用Chromium引擎的功能和优化,提供流畅的浏览体验。 另一个优点是QCEFView的灵活性。它可以与Qt的图形界面框架完美集成,允许开发者根据自己的需求自定义浏览器窗口的外观和行为。开发者可以通过信号和槽机制与QCEFView进行交互,实现诸如加载URL、执行JavaScript代码、获取网页的标题和内容等操作。 同时,QCEFView还可以集成其他Qt组件和功能。例如,可以将QCEFViewQt的网络模块结合使用,实现浏览器的网络功能;也可以与Qt的文件系统模块结合使用,实现浏览器的文件操作功能等。 当然,使用QCEFView也存在一些注意事项。首先,QCEFView的集成可能会增加应用程序的大小和内存占用,因为Chromium引擎是一个相对庞大的库。其次,由于CEF是基于多进程架构的,QCEFView在使用时需要注意处理进程间通信的问题。 总的来说,QCEFView是一个强大且灵活的Qt嵌入浏览器控件,能够为开发者提供良好的浏览体验和自定义能力。无论是用于开发嵌入浏览器应用程序还是添加浏览器功能到现有Qt应用程序中,QCEFView都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值