Qt文档阅读笔记-QWebEngineView及QML WebEngineView

这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读笔记:

 

QWebEngineView

QWebEngineView提供了widget去查看和编辑web网页。

使用load()函数去加载一个web页面,这里会调用GET方法。

使用show函数,展示这个页面。

QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("http://qt-project.org/"));
view->show();

如果访问站点,使用setUrl(),如果加载本地html文件使用setHtml()。

当某给网页被加载的时候loadStarted()信号将会触发。当某个元素完成加载时会触发loadProgress()信号,如图片或者脚本。当加载完成时会触发loadFinished()信号,此信号带有给参数,当为true时说明页面加载完成,当为false时说明相反。

 

page()函数返回web页面对象的指针。QWebEngineView中包含了QWebEnginePage,并且QWebEnginePage会加载到QWebEngineHistory的上下文中。

 

HTML中的title会被设置到title()属性中。Icon()保存其图标或者在iconUrl()中存储其icon的url链接。当这些数据变化时,titileChanged()、iconChanged()、iconUrlChanged()信号将会被触发。ZoomFactor()属性将存储网页内容的放大和缩小。

 

如果需要自定义上下文菜单,需要继承contextMenuEvent(),这里可以在pageAction()中设置QMenu,选中文字,复制粘贴等功能都可以通过这个方式进行实现。使用triggerPageAction()进行触发。

 

这里可以继承QWebEngineView重写createWindows()函数,实现点击后弹出web窗口的功能。

 

这里,个人提供一个简单的例子,可以跑起来

profile

QT       += core gui webenginewidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = WebEngineTest
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += main.cpp\
        Widget.cpp

HEADERS  += Widget.h

FORMS    += Widget.ui

main.cpp

#include "Widget.h"
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //Widget w;
    //w.show();

    QWebEngineView view;
    view.load(QUrl("http://it1995.cn"));
    view.show();

    return a.exec();
}

运行截图如下:

Qt文档阅读笔记-QWebEngineView及QML WebEngineView_第1张图片

源码打包下载地址:

https://github.com/fengfanchen/Qt/tree/master/WebEngineTest

 

下面是QML中如何去用

 

WebEngineView QML Type

WebEngineView可以在QML应用程序中的某个区域渲染出一个动态的web网站。

 

初始化Web Engine

在main函数中调用QtWebEngine::initialize()初始化WebEngine,如下代码:

 int main(int argc, char *argv[])
  {
      QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
      QGuiApplication app(argc, argv);

      QtWebEngine::initialize();

      QQmlApplicationEngine engine;
      engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

      return app.exec();
  }

WebEngineView中,通过url属性,或loadHtml方法,这里是通过GET方法进行调用,如下代码:

  import QtQuick 2.0
  import QtQuick.Window 2.0
  import QtWebEngine 1.0

  Window {
      width: 1024
      height: 750
      visible: true
      WebEngineView {
          anchors.fill: parent
          url: "http://www.qt.io"
      }
  }

loadingChanged()信号将会在页面开始、结束、失败时触发。

title属性中存储网页标题,icon属性存储网页图标,同样zoomFactor属性存储其放缩。

 

certicateError()和WebEngineCertificateError会为错误相关的信号。

 

newViewRequested()信号当有新的页面独立打卡时触发。NewViewDestionation属性存储那个url将会被打卡。

 

findText()为在网页上搜索字符串。

setActiveFocusOnPress()为聚焦网页上的某个元素。

linkHovered()信号是在用户把鼠标移动到链接上的时候就会被触发。

 

UserScripts属性存储用户的脚本,这个脚本会注入到WebEngineScript中。可以使用runJavaScript()方法进行调用。

 

Web engine view可以独立的加载不同的配置文件

 

下面是使用WebEngineView的一个小例子

源码如下:

profile

TEMPLATE = app

QT += qml quick webengine
CONFIG += c++11

SOURCES += main.cpp

RESOURCES += qml.qrc

QML_IMPORT_PATH =

QML_DESIGNER_IMPORT_PATH =

DEFINES += QT_DEPRECATED_WARNINGS

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QtWebEngine::initialize();
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

main.qml

import QtQuick 2.5
import QtQuick.Window 2.2
import QtWebEngine 1.0

Window {
    width: 1024
    height: 750
    visible: true
    WebEngineView {

        anchors.fill: parent
        url: "http:/it1995.cn"
    }
}

程序运行截图如下:

Qt文档阅读笔记-QWebEngineView及QML WebEngineView_第2张图片

源码打包下载地址:

https://github.com/fengfanchen/Qt/tree/master/QMLWebEngineTest

你可能感兴趣的:(C/C++,Qt,工作笔记)