如果从Qt RCC资源系统加载页面,QWebEngineView不会从html页面加载相关资源

时间:2017-08-11 15:11:08

标签: c++ qt qt5 qt-resource qwebengineview

编辑:关注@eyllanesc评论,此处为a minimal example hosted on github。测试在OS X 10.12的Qt5.9上运行。

基本HTML

让我们创建一个通过相对路径 test.html 加载图片的最小示例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的应用程序)并转到“网络”标签,我们可以看到甚至没有尝试来加载 img.jpg

使用绝对路径,没问题

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

问题

  • 这是qrc系统的限制吗?
  • 有办法解决这个问题吗? (没有用方案硬编码绝对路径)

2 个答案:

答案 0 :(得分:1)

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

在@ ad-n的情况下,他跟随docs

  

...

     

例如,文件路径:/images/cut.png或URL    qrc:/// images / cut.png可以访问cut.png文件,其文件   应用程序源树中的位置是images / cut.png。这个可以   使用文件标记的别名属性进行更改:

     

...

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

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

enter image description here

并使用:qrc:/home.html

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

答案 1 :(得分: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"});

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