本篇简介

本篇的小目标:

  • 借助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实现浏览器基本功能相关推荐

  1. qt 嵌入web页面_Qt嵌入浏览器(二)——QWebChannel实现与页面的通信

    本篇简介 本篇的小目标: 借助QWebChannel,实现浏览器与页面的通信交互 上一节中我们实现了浏览器的基本功能和一个简易的调试界面.>>点这里回顾上节内容 本节将尝试在此基础上实现浏 ...

  2. Qt实践3: 图片浏览器

    Qt实现图片浏览器 Qt实践3: 图片浏览器 引言 因课程教学,需要利用Qt做图形界面设计(GUI).自学Qt两月有余,发现现有很多资料,讲述C++程序设计QT项目的较多,不利于新手入门,特别是对于C ...

  3. 360手机浏览器_360手机浏览器9.0新功能测评

    写在前面:鉴于360手机浏览器发布了全新的版本,为了更好地和大家展示介绍这款全新的版本,决定和大家做一次市面上主流的国产浏览器测评,因个人能力和精力有限,文章中可能出现一些不足和错误,也希望大家批评指 ...

  4. 08 | 栈:如何实现浏览器的前进和后退功能?

    栈 后进者先出,先进者后出,这就是典型的"栈"结构.栈是一种"操作受限"的线性表,只允许在一端插入和删除数据. 为什么要使用到"栈"这种操作 ...

  5. uc浏览器TV版最新版本功能简介

    uc浏览器TV版最新版本功能简介 UC浏览器TV版怎么样?提起UC很多人都知道,不就是那款在手机上很火的浏览器么?而要说到UC电视版,知道的人就不多了.本月初,UC发布了旗下首款PC版浏览器,网友们试 ...

  6. ie浏览器安全使用网银支付功能方法

    ie浏览器安全使用网银支付功能方法 ie浏览器怎么安全使用网银支付功能?每次使用我们在使用网银支付时,我们如果不放心自己银行卡的安全.我们在每次支付时候可以选择"清除SSL状态" ...

  7. 比较好的浏览器_一款安卓黑科技手机浏览器 体积很小,功能很6!

    全文共计800字 预计阅读时间2分00秒 时间仓促,推荐一个手机浏览器哈 - Milk浏览器.这个浏览器有什么用?相对比米侠浏浏览器.雨见浏览器...有什么比较好的地方哈,yama做个图好了哈. 底端 ...

  8. 一次性永远激活7290自带浏览器上网和彩信收发功能

    http://www.52blackberry.com/forum.php?mod=viewthread&tid=299811 [2010强悍教程]一次性永远激活7290自带浏览器上网和彩信收 ...

  9. c语言自动填表chrome网页,教你设置Chrome浏览器里的自动填表功能

    [IT168 应用]大家在进行网络购物或者一些网站注册时,往往需要填写收货的地址以及信用卡的支付信息,如果每次都要填写这些信息,显然会非常复杂,并且可能因为没有记住而去再次查询确认身份的信息等. 通过 ...

最新文章

  1. scrapy_redis使用
  2. 如何在Windows下编译OpenSSL?
  3. HDU 3033 I love sneakers! (分组背包变形)
  4. Java序列化(Serialization)的理解
  5. Qt官方开发环境生成的exe发布方式--使用windeployqt
  6. 分页和条件查询接口开发
  7. 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建
  8. python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏
  9. 三星的S3C2440A 存储器控制器
  10. 怎么把c语言改成汇编语言,如何把汇编语言转换成C语言
  11. CentOS Linux 7.9 (2009) 发布
  12. vb脚本从入门到精通_sqlmap从入门到精通第七章720 绕过WAF脚本space2morecommentamp;space2morehash...
  13. 招程序员不要信中医的? | 从编程的角度看中医
  14. (PHP 4, PHP 5) isset — 检测变量是否设置
  15. C++简介(3)--引用和指针
  16. 怎么把java安装到64位_怎么安装64位JAVA,大师来详解
  17. php留言系统源码,XYCMS php留言板 v8.0
  18. php递归函数的用法,PHP递归函数用法
  19. python监控进程脚本_进程监控的python脚本
  20. 新浪微博开放平台接入

热门文章

  1. 如何离线安装 homestead
  2. 智能硬件狂热背后的冷思考:有多少伪刚需?
  3. gpj文件怎么转化成html,001.html
  4. 边缘识别+轮廓识别+边框+二值化
  5. 用友网络王文京:数字化转型成为必由之路 | 工程院院士李德毅:争取2030年农村普及无人拖拉机
  6. Franzis SHARPEN projects 3 professional 3.31.03465 特别版 Mac 照片特效编辑软件
  7. 在华为云服务器上部署的web项目,外网不能访问处理方法
  8. iOS 给Xcode模拟器安装IPA包
  9. 我的世界网易绘梦师国服 装备介绍
  10. WIN7笔记本电脑的语言栏不显示?