博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt文档阅读笔记-QWebEngineView及QML WebEngineView
阅读量:1951 次
发布时间:2019-04-27

本文共 3449 字,大约阅读时间需要 11 分钟。

这里主要是最近有给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();}

运行截图如下:

源码打包下载地址:

 

下面是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 = 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: 1024    height: 750    visible: true    WebEngineView {        anchors.fill: parent        url: "http:/it1995.cn"    }}

程序运行截图如下:

源码打包下载地址:

转载地址:http://nnmif.baihongyu.com/

你可能感兴趣的文章
垂直居中的方法
查看>>
如何使用CSS实现硬件加速?
查看>>
重绘和回流(重排)是什么,如何避免?
查看>>
css3的animation
查看>>
左边宽度固定,右边自适应布局
查看>>
两种以上方式实现已知或者未知宽度的垂直水平居中
查看>>
如何实现小于12px的字体效果
查看>>
JavaScript 闭包
查看>>
作用域链的理解
查看>>
JavaScript原型,原型链
查看>>
vue、react、angular小小比较
查看>>
Node的应用场景
查看>>
js数据类型
查看>>
js有哪些内置对象
查看>>
eval是做什么的
查看>>
null,undefined 的区别
查看>>
javascript 代码中的“use strict“
查看>>
JSON 的了解
查看>>
defer和async
查看>>
严格模式的限制
查看>>