Qt文档阅读笔记-QWebView官方解析与实例
目錄
?
?
背景
官方解析
博主例子
?
背景
最近發(fā)現(xiàn)某Qt項(xiàng)目,出現(xiàn)的效果杠桿的,在看某一小功能的時(shí)候,發(fā)現(xiàn)有個(gè)echart的東西,百度了發(fā)現(xiàn),真的是一個(gè)新大陸,Qt加web編程,賊吉爾可怕。
在此發(fā)現(xiàn)使用QWebengine能做,但本人的編譯器剛好是MSVC2012,貌似要2013以上的版本,才支持,在此使用老的技術(shù),QWebView去做,目前再下一個(gè)Centos,準(zhǔn)備安裝最新版Qt,后期直接在Linux上使用QWebengine。
?
官方解析
QWebView提供Web瀏覽的功能,使用了WebKit瀏覽器內(nèi)核(等會(huì)抓包來(lái)看看)。
如果訪問(wèn)Internet的web,使用load()函數(shù)或setUrl(),訪問(wèn)本地的html網(wǎng)頁(yè)使用setHtml。
QWebView *view = new QWebView(parent);view->load(QUrl("http://qt.nokia.com/"));view->show();這里還有一系列的信號(hào):
? ? ? ? ? 1. loadStarted()信號(hào):
? ? ? ? ? 2. loadProperss()信號(hào);
? ? ? ? ? 3. loadFinished()信號(hào);
這里有個(gè)關(guān)鍵的東西,page(),返回web page對(duì)象。通過(guò)settings()函數(shù)可以對(duì)web頁(yè)面進(jìn)行修改(指開(kāi)不開(kāi)啟JS這種);
訪問(wèn)某一網(wǎng)站,他會(huì)填充title(),icon()這種屬性。
下面這幅圖給出了QWebView和QWebPage以及QWebFrame之間的關(guān)系
這里可以知道:QWebView依賴于QtGui屬性,如果他使用他,就要用QApplication創(chuàng)建主事件循環(huán)。如果使用QWebPage和QwebFrame直接用QCoreApplication創(chuàng)建主事件循環(huán)即可。
?
?
博主例子
一個(gè)簡(jiǎn)單的瀏覽網(wǎng)頁(yè)的例子:
程序結(jié)構(gòu)如下:
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.uimypage.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_Hwidget.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_Hmain.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){//如果是用戶點(diǎn)擊if(frame!=mainFrame()){ //如果不是在本窗口的連接emit openLink(request.url());//發(fā)送打開(kāi)新連接信號(hào)}else{emit loadLink(request.url());//發(fā)送點(diǎn)擊連接信號(hào)}}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
?
這個(gè)網(wǎng)站是可以隨意點(diǎn)擊的!
?
抓下包來(lái)分析下:
從這里可以看到不愧是調(diào)用內(nèi)核accept-Language和connection,user-Aget都填充好了!
從user-Agent中的Applewebkit中可以知道的確是webkit,webviewDemo,這個(gè)就有點(diǎn)搞笑了!
?
?
總結(jié)
以上是生活随笔為你收集整理的Qt文档阅读笔记-QWebView官方解析与实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt笔记-QSerialPort的使用(
- 下一篇: properties随机数与配置文件占位