qt 5.4 qtwebview:无法从android上的qrc加载本地HTML

时间:2015-03-12 21:51:55

标签: android qt webview qml qwebview

我正在尝试将本地HTML文件加载到Qt 5.4.1 QtWebView:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtWebView 1.0

ApplicationWindow {
    visible: true
    title: webView.title

    WebView {
        id: webView
        anchors.fill: parent
        url: "qrc:/index.html"
    }
}

在qrc中引用了HTML文件,一切都在桌面上按预期工作。

但是,当我部署到Android时,webview无法加载本地文件(尽管如果我在网上使用URL,它仍然有效)。

我在文档中找不到任何提示,也没有在qt bug跟踪器中找到任何提示(例如,据我所知,它应该可以工作)。

2 个答案:

答案 0 :(得分:2)

好的,基于fparmana建议,以下代码将qrc中的所有资源复制到临时本地存储,然后可以加载:

QString tmploc = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QDir tmpdir(tmploc + "/my_little_project");

QDirIterator it(":", QDirIterator::Subdirectories);
while (it.hasNext()) {
    QString tmpfile;
    tmpfile = it.next();
    if (QFileInfo(tmpfile).isFile()) {
        QFileInfo file = QFileInfo(tmpdir.absolutePath() + tmpfile.right(tmpfile.size()-1));
        file.dir().mkpath("."); // create full path if necessary
        QFile::remove(file.absoluteFilePath()); // remove previous file to make sure we have the latest version
        QFile::copy(tmpfile, file.absoluteFilePath())
    }
}

// if wanted, set the QML webview URL
context->setContextProperty(QStringLiteral("baseUrl"), QFileInfo(tmpdir.absolutePath() + "/index.html").absoluteFilePath());

答案 1 :(得分:0)

基于此Load local HTML file into WebView尝试首先将index.html提取到本地存储目录。 然后将url更改为绝对路径。

QString resourcesPath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).at(0);
resourcesPath.append(QDir::separator());
resourcesPath.append("index.html");
QFile::copy("qrc:/index.html", resourcesPath);

将resourcesPath值传递给qml并使用该值更改url webview。

尚未测试,但可能会有效。