这里主要是最近有给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 webenginewidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = WebEngineTestTEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSSOURCES += main.cpp\Widget.cppHEADERS += Widget.hFORMS += 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();}

运行截图如下:

源码打包下载地址:

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.0import QtQuick.Window 2.0import QtWebEngine 1.0Window {width: 1024height: 750visible: trueWebEngineView {anchors.fill: parenturl: "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 = appQT += qml quick webengineCONFIG += c++11SOURCES += main.cppRESOURCES += qml.qrcQML_IMPORT_PATH =QML_DESIGNER_IMPORT_PATH =DEFINES += QT_DEPRECATED_WARNINGSqnx: target.path = /tmp/${TARGET}/binelse: 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.5import QtQuick.Window 2.2import QtWebEngine 1.0Window {width: 1024height: 750visible: trueWebEngineView {anchors.fill: parenturl: "http:/it1995.cn"}}

程序运行截图如下:

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

推荐内容