Qt 嵌入浏览器 QWebEngineView实现浏览器基本功能
本篇简介
本篇的小目标:
- 借助Qt自家的QWebEngineView实现浏览器的基本功能:输入地址访问页面和刷新页面
- 定制QWebEngineView的ContextMenu,实现Inspector调试界面的调用
QWebEngineView基础
首先在所创建项目的.pro配置中添加webenginewidgets模块:
QT += webenginewidgets
然后在主窗口初始化时创建QWebEngineView对象:
1 m_webView = new QWebEngineView(this);
2 QStackedLayout* layout = new QStackedLayout(ui->frame);
3 ui->frame->setLayout(layout);
4 layout->addWidget(m_webView);
界面上有一个输入地址的控件(adressEdit)和两个按钮——访问按钮(btnGo)和刷新按钮(btnRefresh),使用QWebEngineView的load和reload方法,可以很方便地实现这两个按钮的功能:
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
1 connect(ui->btnGo, &QPushButton::clicked, this, [this]() {2 QString url = ui->addressEdit->text();3 if (!url.isEmpty())4 {5 m_webView->load(url);6 }7 });8 connect(ui->btnRefresh, &QPushButton::clicked, this, [this]() {9 m_webView->reload();
10 });
这样一个简单的浏览器就实现好了,访问一下百度看看效果:
实现Inspector调试界面
在谷歌浏览器中按一下F12可以调出功能强大的调试界面,QWebEngine中也包含了这个功能。这里我们稍微简化一下,改成在页面上点击右键并选择"Inspect",即可呼出调试界面。
首先需要设置一个环境变量QTWEBENGINE_REMOTE_DEBUGGING来指定调试页面所使用的端口号。例如,将7777端口设为调试端口,可在主窗口初始化方法的最开头添加下面的代码:
qputenv("QTWEBENGINE_REMOTE_DEBUGGING", "7777");
如果设置成功,在终端上会打印如下提示:
Remote debugging server started successfully. Try pointing a Chromium-based browser to http://127.0.0.1:7777
然后实现一个QDialog作为Inspector的界面,里面内嵌另一个QWebEngineView,这个view专门用来加载调试页面:
1 Inspector::Inspector(QWidget *parent) :2 QDialog(parent),3 ui(new Ui::Inspector)4 {5 ui->setupUi(this);6 7 connect(ui->btnClose, &QPushButton::clicked, this, [this](){8 hide();9 });
10
11 m_webView = new QWebEngineView(this);
12 QStackedLayout* layout = new QStackedLayout(ui->frame);
13 ui->frame->setLayout(layout);
14 layout->addWidget(m_webView);
15 m_webView->load(QUrl("http://localhost:7777"));
16 QDialog::show();
17 }
因为这里的关闭按钮实际上只是把界面隐藏起来了,所以重载一下show方法,保证每次打开时调试的页面是最新的:
1 void Inspector::show()
2 {
3 m_webView->reload();
4 QDialog::show();
5 }
最后在主窗口初始化时修改一下QWebEngineViewContextMenu设置。因为QWebEngineView继承了QWidget,所以可以使用与处理QWidget类似的方式定制ContextMenu:
1 m_webView->setContextMenuPolicy(Qt::CustomContextMenu);2 m_inspector = NULL;3 connect(m_webView, &QWidget::customContextMenuRequested, this, [this]() {4 QMenu* menu = new QMenu(this);5 QAction* action = menu->addAction("Inspect");6 connect(action, &QAction::triggered, this, [this](){7 if(m_inspector == NULL)8 {9 m_inspector = new Inspector(this);
10 }
11 else
12 {
13 m_inspector->show();
14 }
15 });
16 menu->exec(QCursor::pos());
17 });
这样一个简单的Inspector就实现完成了,试试效果:
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Qt 嵌入浏览器 QWebEngineView实现浏览器基本功能相关推荐
- qt 嵌入web页面_Qt嵌入浏览器(二)——QWebChannel实现与页面的通信
本篇简介 本篇的小目标: 借助QWebChannel,实现浏览器与页面的通信交互 上一节中我们实现了浏览器的基本功能和一个简易的调试界面.>>点这里回顾上节内容 本节将尝试在此基础上实现浏 ...
- Qt实践3: 图片浏览器
Qt实现图片浏览器 Qt实践3: 图片浏览器 引言 因课程教学,需要利用Qt做图形界面设计(GUI).自学Qt两月有余,发现现有很多资料,讲述C++程序设计QT项目的较多,不利于新手入门,特别是对于C ...
- 360手机浏览器_360手机浏览器9.0新功能测评
写在前面:鉴于360手机浏览器发布了全新的版本,为了更好地和大家展示介绍这款全新的版本,决定和大家做一次市面上主流的国产浏览器测评,因个人能力和精力有限,文章中可能出现一些不足和错误,也希望大家批评指 ...
- 08 | 栈:如何实现浏览器的前进和后退功能?
栈 后进者先出,先进者后出,这就是典型的"栈"结构.栈是一种"操作受限"的线性表,只允许在一端插入和删除数据. 为什么要使用到"栈"这种操作 ...
- uc浏览器TV版最新版本功能简介
uc浏览器TV版最新版本功能简介 UC浏览器TV版怎么样?提起UC很多人都知道,不就是那款在手机上很火的浏览器么?而要说到UC电视版,知道的人就不多了.本月初,UC发布了旗下首款PC版浏览器,网友们试 ...
- ie浏览器安全使用网银支付功能方法
ie浏览器安全使用网银支付功能方法 ie浏览器怎么安全使用网银支付功能?每次使用我们在使用网银支付时,我们如果不放心自己银行卡的安全.我们在每次支付时候可以选择"清除SSL状态" ...
- 比较好的浏览器_一款安卓黑科技手机浏览器 体积很小,功能很6!
全文共计800字 预计阅读时间2分00秒 时间仓促,推荐一个手机浏览器哈 - Milk浏览器.这个浏览器有什么用?相对比米侠浏浏览器.雨见浏览器...有什么比较好的地方哈,yama做个图好了哈. 底端 ...
- 一次性永远激活7290自带浏览器上网和彩信收发功能
http://www.52blackberry.com/forum.php?mod=viewthread&tid=299811 [2010强悍教程]一次性永远激活7290自带浏览器上网和彩信收 ...
- c语言自动填表chrome网页,教你设置Chrome浏览器里的自动填表功能
[IT168 应用]大家在进行网络购物或者一些网站注册时,往往需要填写收货的地址以及信用卡的支付信息,如果每次都要填写这些信息,显然会非常复杂,并且可能因为没有记住而去再次查询确认身份的信息等. 通过 ...
最新文章
- scrapy_redis使用
- 如何在Windows下编译OpenSSL?
- HDU 3033 I love sneakers! (分组背包变形)
- Java序列化(Serialization)的理解
- Qt官方开发环境生成的exe发布方式--使用windeployqt
- 分页和条件查询接口开发
- 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建
- python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏
- 三星的S3C2440A 存储器控制器
- 怎么把c语言改成汇编语言,如何把汇编语言转换成C语言
- CentOS Linux 7.9 (2009) 发布
- vb脚本从入门到精通_sqlmap从入门到精通第七章720 绕过WAF脚本space2morecommentamp;space2morehash...
- 招程序员不要信中医的? | 从编程的角度看中医
- (PHP 4, PHP 5) isset — 检测变量是否设置
- C++简介(3)--引用和指针
- 怎么把java安装到64位_怎么安装64位JAVA,大师来详解
- php留言系统源码,XYCMS php留言板 v8.0
- php递归函数的用法,PHP递归函数用法
- python监控进程脚本_进程监控的python脚本
- 新浪微博开放平台接入
热门文章
- 如何离线安装 homestead
- 智能硬件狂热背后的冷思考:有多少伪刚需?
- gpj文件怎么转化成html,001.html
- 边缘识别+轮廓识别+边框+二值化
- 用友网络王文京:数字化转型成为必由之路 | 工程院院士李德毅:争取2030年农村普及无人拖拉机
- Franzis SHARPEN projects 3 professional 3.31.03465 特别版 Mac 照片特效编辑软件
- 在华为云服务器上部署的web项目,外网不能访问处理方法
- iOS 给Xcode模拟器安装IPA包
- 我的世界网易绘梦师国服 装备介绍
- WIN7笔记本电脑的语言栏不显示?