1. vs2013中的Qt5插件从Qt Project Settings中没有能引入QWebEngineView和QWebChannel的模块,我们可以在vs2013中手动加入。
  2. 附加包含目录:(QTDIR)\include\QtWebEngineWidgets,(QTDIR)\include\QtWebChannel 
    附加依赖项:Qt5WebEngineWidgetsd.lib, Qt5WebChanneld.lib
  3. page()->mainFrame()->evaluateJavaScript(str); 
    => page()->runJavaScript(str);
  4. QWebSettings 
    => QWebEngineSettings
  5. QWebHistory 
    => QWebEngineHistory
  6. page()->mainFrame()->load 
    => page()->load
  7. Incorrect warning MSB8027 reported for files excluded from build

    vs2013更新到update5,或者 
    文本编辑器打开project插入: IgnoreWarnCompileDuplicatedFilename

    … 
    true 

  8. evaluateJavaScript 
    => runJavaScript

  9. evaluateJavaScript返回值 
    => 使用异步回调接受[](const QVariant &val) { }
  10. 设置QWebEngineView背景色 
    => page()->setBackgroundColor(QColor(“#0f0f10”));

  11. Qt WebEngine ICU data not found The application MAY NOT work. Installed Qt WebEngine locales directory not found at location 
    => 增加resources和translations目录,具体放的位置可以看日志哪里可以找到它,可以通过qt.conf文件来配置所在路径

  12. QWebEngineView调试

    方法1:html中加入https://getfirebug.com/firebug-lite.js, 在页面上按F12打开调试面板 
    缺点:这个js文件比较大,载入的时候影响效率;功能有限; 
    方法2:在程序开始的时候qputenv(“QTWEBENGINE_REMOTE_DEBUGGING”, 9000),之后在chrome中打开网址:localhost:9000 
    就可以看到QWebEngineView加载的html了,点击相应的html可以打开chrome的开发者工具; 
    这个方法比上面的好得多。

  13. 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
  1. 同步返回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
  1. runJavaScript时机
connect(this->page(), SIGNAL(loadFinished(bool)), this, SLOT(finish(bool)));
  • 1
  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
  1. 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
  2. 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
  1. 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
  1. web打印日志 
    重载QWebEnginePage中的javaScriptConsoleMessage函数很有用,可以接收到js打印的日志(如:console.log);
  2. 一个QWebEnginePage对应一个QtWebEngineProcess.exe进程,所以当web页窗口不显示的时候最好是销毁掉,不要隐藏;
  3. 某些机器上QWebEngineView内容显示不出来可能跟设置背景色有关;
  4. js与c++之间互调返回值处理 
    QWebEngineView中c++调用js代码是通过异步回调的方式获取的; 
    js调用c++的函数并不能获取c++函数的返回值,可以通过c++发送一个信号给js来返回。
原文: http://blog.csdn.net/tujiaw/article/details/52075495

QWebView到QWebEngineView相关推荐

  1. Qt学习之显示类的控件(QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QWebView、QProgressBar、QOpenGLWidget)

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 5.5 显示类的控件 本节显示类控件是指作为显示用途的控件,本 ...

  2. QT QWebView

    一. 简介 使用QT程序可以访问web页面,但在不同QT版本中使用的类和方法不同: 1. Qt4中使用webkit模块:2. Qt5 ~Qt5.5使用webkitwidgets模块:3. Qt5.6以 ...

  3. QT 调用QWebEngineView显示网页

    环境: Windows:10 C++ Qt:5.14.1 步骤: 第一步:需要在 xxxxx.pro 下添加 QT += webenginewidgets 第二步:mainwindow.h中添加 QW ...

  4. hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView

    如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择.该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的. 注:V5.11及更高版本的PyQt5中不包含Q ...

  5. Qt5 中 QWebEngineView 的使用,让桌面客户端和 web 端友好通信

    一.本文结构 Qt5 中 web 开发的基本配置,工程搭建. 加载 HTML 文件. Qt 界面窗口调用 HTML 中的 JavaScript 函数(Qt 调用 js) Qt 界面窗口获取 HTML ...

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

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

  7. Qt笔记-QWebView完整加载页面及获取cookie

    目录 基本概念 代码与实例 基本概念 在使用QWebView的时候,有些情况下,网页是获取不完善的,在此要设置下QWebView的setting ui.webView->setUrl(QUrl( ...

  8. Qt文档阅读笔记-QWebView官方解析与实例

    目录 背景 官方解析 博主例子 背景 最近发现某Qt项目,出现的效果杠杆的,在看某一小功能的时候,发现有个echart的东西,百度了发现,真的是一个新大陆,Qt加web编程,贼吉尔可怕. 在此发现使用 ...

  9. .net网页input 赋值 提交时空白_《快速掌握PyQt5》第三十章 网页交互QWebEngineView...

    如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择.该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的. 注:V5.11及更高版本的PyQt5中不包含Q ...

最新文章

  1. 三大深度学习生成模型:VAE、GAN及其变种
  2. 用PyTorch实现的李沐《动手学深度学习》,登上GitHub热榜,获得700+星
  3. CelebA数据集在Linux下解压
  4. [转]C++中sleep()函数的使用
  5. imu_utils标定imu问题解决
  6. 改善代码可测性的若干技巧
  7. C++语言(11)——C++类成员函数调用分析
  8. x的奇幻之旅 (史蒂夫·斯托加茨 著)
  9. Java判断奇数偶数-高效率
  10. 《浪潮之巅》吴军:特斯拉自动驾驶堪比中甲水平,全球5G看好华为
  11. 优雅的校验参数-javax.validation
  12. layui扩展模块的使用注意事项
  13. 关于spyder打不开的问题
  14. DW标签使用与javascript文档基础介绍
  15. CMake基础教程(32)文件搜索指令FILE
  16. html常用长度度量单位,度量长度的单位是什么 毫米以下的五个计量单位分别是什么?...
  17. Windows窗口(DirectX3D11学习笔记)
  18. 创业者、如何可以投资小,又可以依附互联网去创业?
  19. 什么软件可以拍证件照电子版?分享两种拍证件照小妙招
  20. 什么是程序员的核心竞争力?

热门文章

  1. 局部边缘保持滤波(LEP)高动态范围图像HDR压缩 matlab程序(一)
  2. 用vue封装分页器,让你的页面简单而不失优雅
  3. 分布式-幂等性解决方案
  4. 用计算机研究甲骨文,基于图像识别技术的甲骨文数据系统
  5. 关于员工激励的思考-期望理论
  6. 桌面动态壁纸 wallPaper engine
  7. 文华财经指标公式大全,通达信指标加密破解DLL加密防破解技术方法
  8. 400行代码实现双人对战五子棋(适合新手入门)
  9. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
  10. 敏捷结果30天之第十一天:高效能、慢生活