1

编辑:在@eyllanesc 评论之后,这是一个托管在 github 上的最小示例。该测试在 OS X 10.12 上的 Qt5.9 上运行。

基础 HTML

让我们创建一个通过相对路径加载图像的最小示例 HTML,test.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
      <div>Image:</div>
      <img src="img.jpg"></img>
  </body>
</html>

该文件是在一个文件夹中创建的,该文件夹还包含img.jpg(应该是一张可爱小狗的照片)

test.html直接在浏览器中打开时,它会按预期显示图像。

 qrc 和相对路径的问题

现在,如果我们将这两个资源都嵌入到 Qt 应用程序中,使用以下 .qrc 文件:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>
    <file alias="test.html">resources/web/test.html</file>
    <file alias="img.jpg">resources/web/img.jpg</file>
</qresource>

</RCC>

我们可以QWebEngineView使用以下形式的一些代码打开 HTML 页面:

mWebView->load(QUrl{"qrc:///test.html"});

页面已加载,但图像未加载。

启用 Web 开发者控制台(通过运行带有参数的应用程序--remote-debugging-port=8888)并转到 Network 选项卡,我们可以看到甚至没有尝试加载img.jpg

 用绝对路径,没问题

如果图像元素更改为<img src="qrc:///img.jpg"></img>,则一切正常并加载图像。

问题

  • 这是qrc系统的设计限制吗?
  • 有没有办法解决它?(不使用该方案对绝对路径进行硬编码)
4

2 回答 2

1

主要问题似乎是如何声明 .html 文件的 URL:

在@ad-n 的情况下,他遵循了文档

...

例如,文件路径 :/images/cut.png 或 URL qrc: ///images/cut.png 将允许访问 cut.png 文件,该文件在应用程序源树中的位置是 images/cut.png。这可以使用文件标签的别名属性来改变:

...

并使用:qrc:///home.html

但是,在我的情况下,我使用 Qt Creator 为我提供了 url,如下图所示:

在此处输入图像描述

并使用:qrc:/home.html

这就是我处理我的案子的原因。

于 2017-08-16T16:16:48.510 回答
0

调查问题后发现,去掉.rcc文件中的所有别名,并在代码中相应地更改资源路径,就可以使用相对路径。

以下是对来源的更改:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>
    <file>resources/web/test.html</file>
    <file>resources/web/img.jpg</file>
</qresource>

</RCC>

-

mWebView->load(QUrl{"qrc:///resources/web/test.html"});

我还不接受这个答案,因为它感觉像是一种解决方法。希望有一种方法可以让它与别名一起使用。

于 2017-08-16T14:16:31.157 回答