如何在 Qt WebView 中显示嵌入的 html

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 有类似问题)。

vil*_*pam 1

好的,这就是我最终解决这个问题的方法。我最终使用了一个普通的小部件而不是基于 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。