目录

背景

官方解析

博主例子


背景

最近发现某Qt项目,出现的效果杠杆的,在看某一小功能的时候,发现有个echart的东西,百度了发现,真的是一个新大陆,Qt加web编程,贼吉尔可怕。

在此发现使用QWebengine能做,但本人的编译器刚好是MSVC2012,貌似要2013以上的版本,才支持,在此使用老的技术,QWebView去做,目前再下一个Centos,准备安装最新版Qt,后期直接在Linux上使用QWebengine。

官方解析

QWebView提供Web浏览的功能,使用了WebKit浏览器内核(等会抓包来看看)。

如果访问Internet的web,使用load()函数或setUrl(),访问本地的html网页使用setHtml。

    QWebView *view = new QWebView(parent);view->load(QUrl("http://qt.nokia.com/"));view->show();

这里还有一系列的信号:

1. loadStarted()信号:

2. loadProperss()信号;

3. loadFinished()信号;

这里有个关键的东西,page(),返回web page对象。通过settings()函数可以对web页面进行修改(指开不开启JS这种);

访问某一网站,他会填充title(),icon()这种属性。

下面这幅图给出了QWebView和QWebPage以及QWebFrame之间的关系

这里可以知道:QWebView依赖于QtGui属性,如果他使用他,就要用QApplication创建主事件循环。如果使用QWebPage和QwebFrame直接用QCoreApplication创建主事件循环即可。

博主例子

一个简单的浏览网页的例子:

程序结构如下:

WebViewDemo.pro

#-------------------------------------------------
#
# Project created by QtCreator 2019-03-22T10:31:26
#
#-------------------------------------------------QT       += core gui webkitwidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = WebViewDemo
TEMPLATE = appSOURCES += main.cpp\widget.cpp \mypage.cppHEADERS  += widget.h \mypage.hFORMS    += widget.ui

mypage.h

#ifndef MYPAGE_H
#define MYPAGE_H#include <QWebPage>
#include <QNetworkRequest>
#include <QObject>class MyPage : public QWebPage
{Q_OBJECT
public:MyPage(QObject *object = 0);signals:void loadLink(const QUrl &url);void openLink(const QUrl &url);protected:bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
};#endif // MYPAGE_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QUrl>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void linkUrl(QUrl url);void openUrl(QUrl url);private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

mypage.cpp

#include "mypage.h"MyPage::MyPage(QObject *object) : QWebPage(object)
{}bool MyPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
{if(type==0){//如果是用户点击if(frame!=mainFrame()){ //如果不是在本窗口的连接emit openLink(request.url());//发送打开新连接信号}else{emit loadLink(request.url());//发送点击连接信号}}return QWebPage::acceptNavigationRequest(frame, request, type);
}

widget.cpp

#include "widget.h"
#include "mypage.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);MyPage *page = new MyPage;ui->webView->setPage(page);this->setWindowTitle("CSDN IT1995");ui->webView->load(QUrl("http://www.it1995.cn/"));connect(page, SIGNAL(linkClicked(QUrl)), this, SLOT(linkUrl(QUrl)));connect(page, SIGNAL(openLink(QUrl)), this, SLOT(openUrl(QUrl)));
}Widget::~Widget()
{delete ui;
}void Widget::linkUrl(QUrl url)
{//qDebug() << url;ui->webView->load(url);
}void Widget::openUrl(QUrl url)
{//qDebug() << url;ui->webView->load(url);
}

widget.ui

这个网站是可以随意点击的!

抓下包来分析下:

从这里可以看到不愧是调用内核accept-Language和connection,user-Aget都填充好了!

从user-Agent中的Applewebkit中可以知道的确是webkit,webviewDemo,这个就有点搞笑了!

Qt文档阅读笔记-QWebView官方解析与实例相关推荐

  1. Qt文档阅读笔记-QSet官方解析及实例

    目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...

  2. Qt文档阅读笔记-QWebPage官方解析与实例

    目录 官方解析 博主例子 源码下载地址 官方解析 QWebPage提供一个视图对象和一个web页面: QWebPage提供了web页面的内容,各种设置(是否支持JavaScript等)和连接,它与QW ...

  3. Qt文档阅读笔记-QtWebApp官方解析与实例(使用QtWebApp搭建HTTP服务器)

    目录 官方解析 博主例子 官方解析 QtWepApp是一个C++的http服务器,受到了java Servlets的启发,因为是Qt写的,所以有跨平台的支持. QtWebApp包含如下的组成部分:   ...

  4. Qt文档阅读笔记-QHostInfo官方解析与实例(根据Host获取IP)

    官方解析 QHostInfo提供了一个静态方法获取主机名: QHostInfo中有一个查找机制,可以根据IP找主机名,也可能工具主机名找IP,可以通过调用QHostInfo::lookupHost这个 ...

  5. Qt文档阅读笔记-QTcpServer官方解析与实例(使用QSocket创建简单的HTTP服务器)

    目录 官方解析 博主例子(做一个简单的HTTP服务器) 本例子中HTTP协议关键点 官方解析 QTcpServer类,提供TCP服务的基础: 这个类接受TCP连接,可以指定一个端口,也可以让其自动一个 ...

  6. Qt文档阅读笔记-Q_CLASSINFO官方解析与实例

    官方解析 Q_CLASSINFO 这个宏为类提供额外的信息,要想获取这个Q_CLASSINFO这个信息要使用QObject::metaObject().Qt在Active Qt,Qt D-BUS以及Q ...

  7. Qt文档阅读笔记-stackUnder官方解析与实例

    目录 官方解析 博主例子 官方解析 这里可以配合raise()和lower()这两个函数来使用! 博主例子 用2个label,点击谁谁就浮在界面的最上面,很简单的代码,程序运行截图如下: 源码如下: ...

  8. Qt文档阅读笔记-QPropertyAnimation官方解析及实例

    目录 官方解析 博主例子 官方解析 QPropertyAnimation QPropertyAnimation类为Qt属性提供动画. QPropertyAnimation类可以修改Qt属性,从而达到动 ...

  9. Qt文档阅读笔记-QNetworkAccessManager官方解析与实例

    目录 官方解析 博主例子 官方解析 QNetworkAccessMangager类运行应用程序回复和接收网络包. QNetworkAccessManager是一套API库,可以发包,设置代理,内存配置 ...

最新文章

  1. JS获取系统时间--JavaScript基础
  2. Hadoop Distributed File System 简介
  3. 点击费用百度竞价修改方法
  4. Spring Boot(十四)RabbitMQ延迟队列
  5. crontab 周日_linux之crontab命令
  6. 修改服务器Apache-Coyote/1.1标识为自定义内容
  7. 原始图像扩展_Resize Sense for Mac(图像处理软件)
  8. PTA 程序设计天梯赛(61~80题)
  9. 【MATLAB】三维图形绘制 ( plot3 函数 | plot3 绘图示例 | 2D 与 3D 关联 )
  10. SQL 升序、降序排列
  11. linux的重启ip失效,linux配置ip 重启出错解决方法
  12. oracle清除过期备份,rman delete obsolete删除过期备份集问题
  13. Acwing-873. 欧拉函数
  14. 网络信息安全的重要性
  15. 抖音直播带货数据统计,抖音直播带货复盘必看的4个数据
  16. win10系统DPC_WATCHDOG_VIOLATION蓝屏靠谱解决办法
  17. 内置计算机函数sgn,“sgn”是什么函数?
  18. cocos2dx android obb,cocos2dx 实现obb包读取 quick2.2.6
  19. php生成字母头像,Identicon:实现根据用户账号生成像素头像 php 版
  20. Dijkstra算法的思想

热门文章

  1. 超全干货:数据可视化的设计总结,工具,技术要点统统都有
  2. 7个理由,给你推荐这款“秒杀Excel”的分析神器!
  3. 官方中文文档上线了!Python各种教程已汉化。
  4. Eraser unused space 失败的原因分析!
  5. 但我发现了幸福的超级玛丽
  6. Pragma是什么?
  7. RedMonk 2020 年 Q3 编程语言排行:Python力压Java和PHP,Rust 首次进入前 20
  8. 经典面试题(17):以下代码将输出的结果是什么?
  9. 第五节:一个令人兴奋的ES6新特性:解构赋值
  10. 同样是面试简历,为何你如此风骚!