QWebEngineView не загружает относительные ресурсы со страницы html, если страница загружается из системы ресурсов Qt RCC

редактировать: После комментария @eyllanesc, вот минимальный пример, размещенный на github. Тест запускается на Qt5.9, на OS X 10.12.

Базовый 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>

Мы можем открыть страницу HTML в QWebEngineView с некоторым кодом формы:

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

Страница загружена, но изображение нет.

Включение консоли веб-разработчика (запустив приложение с аргументом --remote-debugging-port=8888) и перейдя на вкладку Сеть, мы видим, что есть даже не попытка загрузить IMG.jpg.

 С абсолютным путем нет проблем

Если элемент изображения был изменен на <img src="qrc:///img.jpg"></img>, то все работает нормально и изображение загружается.

Вопросы

  • Это ограничение системы qrc по конструкции?
  • Есть ли способ обойти это? (без жесткого кодирования абсолютного пути со схемой)

1

Решение

Основная проблема заключается в том, как объявляется URL-адрес файла .html:

В случае @ ad-n он следовал документы:

Например, путь к файлу: /images/cut.png или URL
QRC: /// images / cut.png даст доступ к файлу cut.png, чей
расположение в исходном дереве приложения — images / cut.png. Это может
изменить с помощью атрибута псевдонима тега file:

И использовать: qrc:///home.html

Однако в моем случае я использовал Qt Creator, чтобы предоставить мне URL, как показано на следующем рисунке:

введите описание изображения здесь

И использовать: qrc:/home.html

Вот почему я работаю над своим делом.

1

Другие решения

Исследуя проблему, выясняется, что избавление от всех псевдонимов в .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"});

Я пока не принимаю этот ответ, так как это похоже на обходной путь. Надеюсь, есть способ заставить его работать с псевдонимами.

0

По вопросам рекламы [email protected]