如何在 Qt 资源中打包图片以便从静态 HTML 资源访问

Posted

技术标签:

【中文标题】如何在 Qt 资源中打包图片以便从静态 HTML 资源访问【英文标题】:How to pack images in Qt resource to be accessible from a static HTML resource 【发布时间】:2016-12-08 09:09:52 【问题描述】:

我有一个使用 QWebEngineView 来显示静态 html 页面的 Qt Widgets 项目。该页面将显示需要与 Qt 可执行文件/安装程序“打包”的图像。我可以使用 QRC 文件添加图像并从 HTML 文件中引用它吗?

我(可悲地)尝试使用“qrc:/image...”表示法访问图像,但我完全理解 QWebEngineView 显示的嵌入式浏览器与项目资源无关。另一种方法?

【问题讨论】:

不完全明白你想要什么,但你能把图像加载到临时文件中并在 HTML 中将它作为一个源吗? 也可能是一个很好的解决方案。只有在这种情况下,我需要将 html + 图片部署到某个临时位置。喜欢 lesyk 的回答 您可以使用QTemporaryFileQTemporaryDirQDesktopServices::TempLocation 作为临时位置生成实用程序。另一种方法是使用 Base64 编码将图像嵌入到 HTML 中,但它会使您的 HTML 变大,我不确定 QWebEngineView 是否支持它。 【参考方案1】:

对于 main.cpp 中的 Qt 5.6:

...
QString helpHTMLFile = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
helpHTMLFile.append(QDir::separator());
helpHTMLFile.append("index.html");
QFile(helpHTMLFile).remove();
QFile(":/index.html").copy(helpHTMLFile);

QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("pathToFile", "file:///"+helpHTMLFile);

QString logo = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
logo.append(QDir::separator());
logo.append("logo.svg");
QFile(logo).remove();
QFile(":/logo.svg").copy(logo);
...

在html中:

...
<img src="logo.svg" class="loginFooterImg">
...

【讨论】:

看起来像我正在尝试做的事情。将检查并返回结果 其他选项是从网络加载图像。 (我相信你已经考虑过了。) 不是这样......因为这只是一个简单的桌面应用程序

以上是关于如何在 Qt 资源中打包图片以便从静态 HTML 资源访问的主要内容,如果未能解决你的问题,请参考以下文章

Vue打包后访问静态资源路径问题

Vue打包项目图片等静态资源的处理

Webpack基本打包配置及打包静态资源

vue项目静态资源(图片,字体)引用路径正确姿势

vue3:加载本地图片等静态资源

React Native TypeScript 图片和静态资源