如标题中所述,我的问题是如果 qwebview 驻留在我的资源中,它就无法正确加载 html 文件。如果我从资源外部加载它作为普通本地文件,它会完美加载。但这不是我的选择。我想将文件与应用程序捆绑在一起。
编辑:顺便说一句,我正在谈论来自网络的外部资源。(例如http://host.org/somejavascript.js)感谢您的帮助
如标题中所述,我的问题是如果 qwebview 驻留在我的资源中,它就无法正确加载 html 文件。如果我从资源外部加载它作为普通本地文件,它会完美加载。但这不是我的选择。我想将文件与应用程序捆绑在一起。
编辑:顺便说一句,我正在谈论来自网络的外部资源。(例如http://host.org/somejavascript.js)感谢您的帮助
请看一下
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )
根据文档的第二个参数:
HTML 文档中引用的样式表或图像等外部对象相对于 baseUrl 定位。
下面是对我有用的代码。
#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”会在“external.org/”子路径、“http://external.org/script”下查找“script.js” .js" 是一个绝对 URL。
编辑:
假设你有这个HTML文件作为资源“:/file.html”,它是从“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 就知道从哪里获取“code.js”和“image.jpg”。使用QWebView::load()
将不起作用,因为根 URL 将是一些内部 URL,以 qrc:// 开头的 URL,WebKit 将在您的应用程序资源中查找“code.js”和“image.jpg”。基本上,您只能load()
在文档中的所有相对 URL 来自与 URL 指向的相同位置时使用。如果您load(QUrl("qrc:///file.html"));
在上述情况下使用,则 URL ( qrc:///file.html
) 指向您的资源系统。
如果您还想在 HTML 中包含您的资源,您可以在 HTML 文件中使用 qrc:// URL。