QWebView не загружает внешние ресурсы, если он загружает html-файл из qresources

как описано в заголовке моя проблема заключается в том, что qwebview не загружает html-файл правильно, если он находится в моих ресурсах. Он загружает его отлично, если я загружаю его из-за пределов ресурсов как обычный локальный файл. Но это не вариант для меня. Я хотел бы связать файл с приложением.

EDIT: кстати, я говорю о внешних ресурсах из интернета. (например,http://host.org/somejavascript.js) Спасибо за любую помощь

2 ответов


пожалуйста, взгляните на второй параметр
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() ) Согласно документация:

внешние объекты, такие как таблицы стилей или изображения, на которые ссылается HTML документ относительно автоопределения.

Ниже приведен код, который работает для меня.

#include <QtCore/QFile>
#include <QtCore/QUrl>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtWebKit/QWebView>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow window;
    QWebView webview(&window);

    QFile source(":/google.com.html");
    source.open(QIODevice::ReadOnly);
    webview.setHtml(QString::fromUtf8(source.readAll().constData()), QUrl("http://google.com"));
    window.setCentralWidget(&webview);
    window.show();

    return app.exec();
}

внешние URL-адреса должны иметь схему, чтобы сделать их внешними, иначе "external.org/script.js "ищет" сценарий.js " под "external.org /" под-путь", http://external.org/script.js " является абсолютным URL.

Edit:
Скажем, у вас есть этот HTML-файл в качестве ресурса": / file.html " и это coppied от "http://example.com/":

<html>
 <head>
  <title>My HTML</title>
  <script type="text/javascript" src="/code.js"></scipt>
 </head>
 <body>
  <img href="/image.jpg" />
 </body>
</html>

затем, чтобы отобразить это правильно, вам нужно будет сделать следующее:

QFile res(":/file.html");
res.open(QIODevice::ReadOnly|QIODevice::Text);
my_webview.setHtml(res.readAll(), QUrl("http://example.com/");

таким образом, WebKit знает, где чтобы получить " код.ОАО" и "изображения.jpg " от. Используя QWebView::load() не будет работать, так как корневой URL-адрес будет некоторым внутренним URL-адресом, начинающимся с qrc://, и WebKit будет искать "код.ОАО" и "изображения.jpg " в ваших ресурсах приложений. В принципе, вы можете использовать load() когда все относительные URL-адреса в документе поступают из того же места, на которое указывает URL-адрес. И если вы использовали load(QUrl("qrc:///file.html")); В приведенном выше случае URL (qrc:///file.html) указывает на вашу систему ресурсов.

если вы хотите также включите свои ресурсы в HTML, вы можете использовать URL-адреса qrc:// в HTML-файле.