如何在 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 的回答 您可以使用QTemporaryFile
、QTemporaryDir
或QDesktopServices::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 资源访问的主要内容,如果未能解决你的问题,请参考以下文章