我正在尝试将本地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跟踪器中找到任何提示(例如,据我所知,它应该可以工作)。
答案 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。
尚未测试,但可能会有效。