-
vs2013中的Qt5插件从Qt Project Settings中没有能引入QWebEngineView和QWebChannel的模块,我们可以在vs2013中手动加入。
-
附加包含目录:
(
Q
T
D
I
R
)
\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;
-
同步返回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());
解决办法,定义信号和槽函数,使用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);
-
runJavaScript时机
connect(this->page(), SIGNAL(loadFinished(bool)), this, SLOT(finish(bool)));
- js调用C++时机
window.cppobj = null;
new QWebChannel(qt.webChannelTransport, function(channel) {
window.cppobj = channel.objects.cppobj;
cppobj.init();
-
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;
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 '';
1234567891011121314151617181920212223
- QWebEngineView接收drop事件
之前setAcceptDrops(true);就可以了,现在还需要:
void webview::dragEnterEvent(QDragEnterEvent *event)
event->accept();
QWebEngineView::dragEnterEvent(event);
才能触发void webview::dropEvent(QDropEvent * event)
- web打印日志
重载QWebEnginePage中的javaScriptConsoleMessage函数很有用,可以接收到js打印的日志(如:console.log); - 一个QWebEnginePage对应一个QtWebEngineProcess.exe进程,所以当web页窗口不显示的时候最好是销毁掉,不要隐藏;
- 某些机器上QWebEngineView内容显示不出来可能跟设置背景色有关;
- js与c++之间互调返回值处理
QWebEngineView中c++调用js代码是通过异步回调的方式获取的;
js调用c++的函数并不能获取c++函数的返回值,可以通过c++发送一个信号给js来返回。
原文: http://blog.csdn.net/tujiaw/article/details/52075495
下面是QT依赖的所有的库,构建运行过程中缺少哪一个库,找到后执行sudo apt-get install+库。1、Qt的媒体模块(Qt += multimedia)缺少模块multimedia的问题。比如Qt显示缺少serialbus库,搜索相关库,找到四个,全部安装。......
公司一款产品的客户端使用了c/s、b/s混合模式,其中在线媒体浏览使用Html5的多媒体支持特性实现。然后,问题出来了:Qt自带的Webengine版本(Qt 5.6)不支持.mp4格式的多媒体文件,只能在线播放ogg。编译使用了visual studio 2015。
【编译参考】
linux:https://wiki.qt.io/How_to_Try_QtWebEngine
windo
该例子支持Windows和Linux双系统实现,基于QT 5.14.2版本。Windows下安装webkit库,将下载的该压缩包拷贝至QT目录。qwebchannel.js脚本请从下方文章复制下。
解决方案:
在vc目录下找到vcredist_x64.exe(找自己对应版本),安装(考虑把运行时库同时发布到程序目录或者制作安装程序,同时安装vcredist_x64.exe),重启之后不再报缺少VC运行时库。
接着运行程序挂掉了,提示挂在了Qt5WebEngineCore.dll中,...
zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
使用root用户报错
Could not find QtWebEngineProcess
详细的报错还有一个relocation error,然后指向的位置是用户目录下的
/home/用户
首先声明,本文并非原创,纯属搬运,内容来自一位叫做飞扬青春的大神的Gitee主页,主要是为了收藏下面介绍的100多个Qt开发经验。比如qss的ANSI编码、嵌套窗口中主窗口无法接收鼠标移动事件等,又比如我用qss设置窗口样式,但是项目每次重新构建以后,样式表就会不生效等问题,也花了自己不少时间去解决,所以在这里转发大神的经验,留作以后参考和逐条的研究,也分享给更多正在学习Qt或者正在使用Qt进行程序开发的朋友们。(点这下载最新版Qt)
1. 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着
实际上由于我的电脑可以上网,并且源中就有qt,所以执行命令
sudo apt -y updatesudo apt -y install qtcreator qt5-default qtdeclarative5-dev build-essential g++ cmake