редактировать: После комментария @eyllanesc, вот минимальный пример, размещенный на github. Тест запускается на Qt5.9, на OS X 10.12.
Давайте создадим минимальный пример 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 открывается прямо в браузере, он показывает изображение, как и ожидалось.
Теперь, если мы встроим оба ресурса в приложение 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>
, то все работает нормально и изображение загружается.
Основная проблема заключается в том, как объявляется 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
Вот почему я работаю над своим делом.
Исследуя проблему, выясняется, что избавление от всех псевдонимов в .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"});
Я пока не принимаю этот ответ, так как это похоже на обходной путь. Надеюсь, есть способ заставить его работать с псевдонимами.