QWebView到QWebEngineView
- vs2013中的Qt5插件从Qt Project Settings中没有能引入QWebEngineView和QWebChannel的模块,我们可以在vs2013中手动加入。
- 附加包含目录:(QTDIR)\include\QtWebEngineWidgets,(QTDIR)\include\QtWebChannel
附加依赖项:Qt5WebEngineWidgetsd.lib, Qt5WebChanneld.lib - page()->mainFrame()->evaluateJavaScript(str);
=> page()->runJavaScript(str); - QWebSettings
=> QWebEngineSettings - QWebHistory
=> QWebEngineHistory - page()->mainFrame()->load
=> page()->load Incorrect warning MSB8027 reported for files excluded from build
vs2013更新到update5,或者
文本编辑器打开project插入: IgnoreWarnCompileDuplicatedFilename…
true
…evaluateJavaScript
=> runJavaScript- evaluateJavaScript返回值
=> 使用异步回调接受[](const QVariant &val) { } 设置QWebEngineView背景色
=> page()->setBackgroundColor(QColor(“#0f0f10”));Qt WebEngine ICU data not found The application MAY NOT work. Installed Qt WebEngine locales directory not found at location
=> 增加resources和translations目录,具体放的位置可以看日志哪里可以找到它,可以通过qt.conf文件来配置所在路径QWebEngineView调试
方法1:html中加入https://getfirebug.com/firebug-lite.js, 在页面上按F12打开调试面板
缺点:这个js文件比较大,载入的时候影响效率;功能有限;
方法2:在程序开始的时候qputenv(“QTWEBENGINE_REMOTE_DEBUGGING”, 9000),之后在chrome中打开网址:localhost:9000
就可以看到QWebEngineView加载的html了,点击相应的html可以打开chrome的开发者工具;
这个方法比上面的好得多。linkClicked(QUrl)
重载QWebEnginePage实现acceptNavigationRequest接口
bool WebPage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
{if (isMainFrame) {if (NavigationTypeLinkClicked == type) {emit sigLoadUrl(url);return false;}}return true;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 同步返回runJavaScript结果,谨慎使用
QPair<bool, QVariant> syncRunJavaScript(QWebEnginePage *page, const QString &javascript, int msec)
{QPair<bool, QVariant> result = qMakePair(false, 0);QSharedPointer<QEventLoop> loop = QSharedPointer<QEventLoop>(new QEventLoop());QTimer::singleShot(msec, loop.data(), &QEventLoop::quit);page->runJavaScript(javascript, [loop, &result](const QVariant &val) {if (loop->isRunning()) {result.first = true;result.second = val;loop->quit();}});loop->exec();return result;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
在QWebEngineView重载函数contextMenuEvent中不能调用!
runJavaScript回调中不能进行长时间的操作,否则会阻塞JavaScript代码执行,如:
page()->runJavaScript("script", [](const QVariant &val) {// ...menu.exec(QCursor::pos());
}
- 1
- 2
- 3
- 4
解决办法,定义信号和槽函数,使用QueuedConnection的方式connect,在slotJavaScriptResult中处理耗时操作。
connect(this, &webview::sigJavaScriptResult, this, &webview::slotJavaScriptResult, Qt::QueuedConnection);
void sigJavaScriptResult(const QString &command, const QVariantMap &result);
void slotJavaScriptResult(const QString &command, const QVariantMap &result);
- 1
- 2
- 3
- runJavaScript时机
connect(this->page(), SIGNAL(loadFinished(bool)), this, SLOT(finish(bool)));
- 1
- js调用C++时机
window.cppobj = null;
new QWebChannel(qt.webChannelTransport, function(channel) {window.cppobj = channel.objects.cppobj;cppobj.init(); // 通知C++初始化完成
});
- 1
- 2
- 3
- 4
- 5
web页面,右键鼠标点击的元素
function contextMenu(e) {var targ; if (!e) { var e = window.event; } if (e.target) { targ = e.target; } else if (e.srcElement) { targ = e.srcElement; } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- web页面,获取选中的html
function getHTMLOfSelection () {var range;if (document.selection && document.selection.createRange) {range = document.selection.createRange();return range.htmlText;}else if (window.getSelection) {var selection = window.getSelection();if (selection.rangeCount > 0) {range = selection.getRangeAt(0);var clonedSelection = range.cloneContents();var div = document.createElement('div');div.appendChild(clonedSelection);return div.innerHTML;}else {return '';}}else {return '';}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- QWebEngineView接收drop事件
之前setAcceptDrops(true);就可以了,现在还需要:
void webview::dragEnterEvent(QDragEnterEvent *event)
{event->accept();QWebEngineView::dragEnterEvent(event);
}
才能触发void webview::dropEvent(QDropEvent * event)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- web打印日志
重载QWebEnginePage中的javaScriptConsoleMessage函数很有用,可以接收到js打印的日志(如:console.log); - 一个QWebEnginePage对应一个QtWebEngineProcess.exe进程,所以当web页窗口不显示的时候最好是销毁掉,不要隐藏;
- 某些机器上QWebEngineView内容显示不出来可能跟设置背景色有关;
- js与c++之间互调返回值处理
QWebEngineView中c++调用js代码是通过异步回调的方式获取的;
js调用c++的函数并不能获取c++函数的返回值,可以通过c++发送一个信号给js来返回。
QWebView到QWebEngineView相关推荐
- Qt学习之显示类的控件(QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QWebView、QProgressBar、QOpenGLWidget)
本文转自:<Qt编程指南> 作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 5.5 显示类的控件 本节显示类控件是指作为显示用途的控件,本 ...
- QT QWebView
一. 简介 使用QT程序可以访问web页面,但在不同QT版本中使用的类和方法不同: 1. Qt4中使用webkit模块:2. Qt5 ~Qt5.5使用webkitwidgets模块:3. Qt5.6以 ...
- QT 调用QWebEngineView显示网页
环境: Windows:10 C++ Qt:5.14.1 步骤: 第一步:需要在 xxxxx.pro 下添加 QT += webenginewidgets 第二步:mainwindow.h中添加 QW ...
- hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView
如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择.该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的. 注:V5.11及更高版本的PyQt5中不包含Q ...
- Qt5 中 QWebEngineView 的使用,让桌面客户端和 web 端友好通信
一.本文结构 Qt5 中 web 开发的基本配置,工程搭建. 加载 HTML 文件. Qt 界面窗口调用 HTML 中的 JavaScript 函数(Qt 调用 js) Qt 界面窗口获取 HTML ...
- Qt文档阅读笔记-QWebEngineView及QML WebEngineView
这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...
- Qt笔记-QWebView完整加载页面及获取cookie
目录 基本概念 代码与实例 基本概念 在使用QWebView的时候,有些情况下,网页是获取不完善的,在此要设置下QWebView的setting ui.webView->setUrl(QUrl( ...
- Qt文档阅读笔记-QWebView官方解析与实例
目录 背景 官方解析 博主例子 背景 最近发现某Qt项目,出现的效果杠杆的,在看某一小功能的时候,发现有个echart的东西,百度了发现,真的是一个新大陆,Qt加web编程,贼吉尔可怕. 在此发现使用 ...
- .net网页input 赋值 提交时空白_《快速掌握PyQt5》第三十章 网页交互QWebEngineView...
如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择.该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的. 注:V5.11及更高版本的PyQt5中不包含Q ...
最新文章
- 三大深度学习生成模型:VAE、GAN及其变种
- 用PyTorch实现的李沐《动手学深度学习》,登上GitHub热榜,获得700+星
- CelebA数据集在Linux下解压
- [转]C++中sleep()函数的使用
- imu_utils标定imu问题解决
- 改善代码可测性的若干技巧
- C++语言(11)——C++类成员函数调用分析
- x的奇幻之旅 (史蒂夫·斯托加茨 著)
- Java判断奇数偶数-高效率
- 《浪潮之巅》吴军:特斯拉自动驾驶堪比中甲水平,全球5G看好华为
- 优雅的校验参数-javax.validation
- layui扩展模块的使用注意事项
- 关于spyder打不开的问题
- DW标签使用与javascript文档基础介绍
- CMake基础教程(32)文件搜索指令FILE
- html常用长度度量单位,度量长度的单位是什么 毫米以下的五个计量单位分别是什么?...
- Windows窗口(DirectX3D11学习笔记)
- 创业者、如何可以投资小,又可以依附互联网去创业?
- 什么软件可以拍证件照电子版?分享两种拍证件照小妙招
- 什么是程序员的核心竞争力?