vil*_*pam 5 qt embedded-resource qtwebkit qml qt5
我试图让 Qt WebView 显示一个嵌入为 Qt 资源的 html 文件,但我似乎无法让它工作。我创建了一个新的 Qt Quick 应用程序并添加了一个简单的 qml 文件:
import QtQuick 2.0
import QtWebKit 3.0
Rectangle {
id: content
width: 800
height: 600
color: "black"
WebView {
id: webView
anchors.fill: parent
url: "qrc:/res/test.html"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我(使用设计器)创建了一个如下所示的资源文件:
<RCC>
<qresource prefix="/res">
<file>test.html</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
并创建了一个简单的 test.html 文件(与 .qrc 文件在同一目录中):
<html>
<head><title>Hello</title></head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
结果只是一个空白的白色窗口。如果我http://www.stackoverflow.com
在 qml 文件中使用常规 url ( ) 作为它工作的 url - 该页面将显示。如果我使用嵌入图像的名称 ( qrc:/qt-project.org/mac/cursors/images/pluscursor.png
),则会显示该图像。
在我看来,好像确实添加了 html 文件(至少在我枚举嵌入式资源时会列出),但我对 Qt 资源系统的理解有限,所以我很可能误解了一些基本的东西。
谁能告诉我我做错了什么?
更新:我已经验证,如果我尝试告诉 Web 视图也从 C++ 加载 url,则行为是相同的。我还验证了资源确实是嵌入的 - 我可以使用 QResource 打开和读取资源。此外,这似乎不是 Qt5 特有的:http ://qt-project.org/forums/viewthread/18181 (有人与 Qt 4.8 有类似问题)。
好的,这就是我最终解决这个问题的方法。我最终使用了一个普通的小部件而不是基于 qml 的界面。
然后我必须手动从资源中读取第一个 html 页面并提供基本 url。之后,作为资源嵌入的后续页面和资源可以正常加载。
这是有问题的代码:
QResource res(":/html/index.html");
ui->webView->setHtml(reinterpret_cast<const char *>(res.data()), QUrl("qrc:/html/"));
Run Code Online (Sandbox Code Playgroud)
哪里webView
是 a QWebView
. 我的 .qrc 文件如下所示:
<RCC>
<qresource prefix="/">
<file>html/index.html</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
这适用于 Qt 5.5.0。
归档时间: |
|
查看次数: |
16699 次 |
最近记录: |