QT WebEngine 和 JavaScript 无法加载 .PNG 图像
Posted
技术标签:
【中文标题】QT WebEngine 和 JavaScript 无法加载 .PNG 图像【英文标题】:QT WebEngine & JavaScript failed to load .PNG image 【发布时间】:2017-05-09 06:25:05 【问题描述】:我的工作环境:Qt 5.8 MSVC2015 64bit, Windows 7 64 bit, Web engine, JavaScript.
在 QT 代码中,我正在加载图像,将数据转换为 QByteArray 并传输回 javascript。所以javascript可以渲染图像。 但 JavaScript 无法加载 .png 图像,知道我在这里缺少什么吗?
QT .h 文件代码:
Q_INVOKABLE QByteArray GetTile();
QT .cpp 文件代码:
QByteArray ExportedObject::GetTile()
QByteArray arr;
QFile imageFile("D:\\2.png");
arr = imageFile.readAll();
imageFile.close();
return arr;
JavaScript 代码:
var myRetValue;
myRetValue = window.interface.GetTile(function(returnValue)
return returnValue;
);
alert (myRetValue);
document.getElementById("ItemPreview").src = "data:image/png;base64," + returnValue;
为什么 returnValue 不存储在 myRetValue 中?
【问题讨论】:
任何错误信息? 我必须承认,我对 WebEngine 了解不多,但我发现你在C++
中定义了一个不带参数的函数,然后将一个 JS 函数传递给它,这很有趣。
当我将图像缓冲区分配给 document.getElementById("ItemPreview").src 时,它不会加载任何图像。
@derM: var myRetValue; myRetValue = window.interface.GetTile(function(returnValue) return returnValue; );警报(myRetValue);为什么 myRetValue 没有得到 returnValue ?
@derM:谢谢,在你们 cmets 之后我改变了问题。
【参考方案1】:
@derM:非常感谢您的投入。修复是将 QByteArray 转换为 Base64。
return arr.toBase64();
如果没有 Base64,我只会收到 NULL (/r/n) 终止的字符串。
【讨论】:
以上是关于QT WebEngine 和 JavaScript 无法加载 .PNG 图像的主要内容,如果未能解决你的问题,请参考以下文章
Qt基础之十八:WebEngine与JavaScript交互
Qt基础之十八:WebEngine与JavaScript交互