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交互

Qt5.9 WebEngine 概述

从 WebEngine QT 5.13.0 中的 javascript 对话框获取下载文件名

项目错误:QT 中的未知模块:webengine

Qt5.9.1 和 Visual Studio 2015 添加 Qt WebEngine 模块