这里主要是最近有给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();
}
运行截图如下:
源码打包下载地址:
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"
}
}
程序运行截图如下:
源码打包下载地址:
https://github.com/fengfanchen/Qt/tree/master/QMLWebEngineTest