5

Qt リソースとして埋め込まれた html ファイルを表示する Qt WebView を取得しようとしていますが、動作させることができないようです。新しい 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"
    }
}

次に、(Designer を使用して) 次のようなリソース ファイルを作成しました。

<RCC>
    <qresource prefix="/res">
        <file>test.html</file>
    </qresource>
</RCC>

簡単な test.html ファイルを作成しました (.qrc ファイルと同じディレクトリに):

<html>
<head><title>Hello</title></head>
<body>
  <h1>Hello World!</h1>
</body>
</html>

結果は、空白の白いウィンドウです。http://www.stackoverflow.comqml ファイルで通常の URL ( ) を URL として使用すると、ページが表示されます。埋め込み画像 ( qrc:/qt-project.org/mac/cursors/images/pluscursor.png) の名前を使用すると、その画像が表示されます。

html ファイルが実際に追加されているように見えますが (埋め込みリソースを列挙すると、少なくともリストされます)、Qt リソース システムの理解が限られているため、基本的なことを誤解している可能性があります。

誰が私が間違っているのか教えてもらえますか?

更新: C++ からも URL をロードするように Web ビューに指示しようとしても、動作が同じであることを確認しました。また、リソースが実際に埋め込まれていることも確認しました。QResource を使用してリソースを開いて読み取ることができます。また、これは Qt5 に固有のものではないようです: http://qt-project.org/forums/viewthread/18181 (Qt 4.8 で同様の問題を抱えている人)。

4

8 に答える 8

2

WebView で直接 qrc からリソースを開くことができるとは思いません (すべての URL バリアントを試しました)。私が今やっているのは、ファイルをローカルの一時ディレクトリにコピーしてから開くことです。

QString helpHTMLFile = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
helpHTMLFile.append(QDir::separator());
helpHTMLFile.append("software_manual.html");
QFile(helpHTMLFile).remove();
QFile(":/software_manual.html").copy(helpHTMLFile);

QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("pathToFile", "file:///"+helpHTMLFile);

次に、QML は次のようになります。

WebView {
         anchors.fill: parent
         url: pathToFile
}
于 2015-07-21T07:29:14.260 に答える
1

わかりました、これが私がこれを解決した方法です。結局、qml ベースのインターフェースではなく、単純なウィジェットを使用することになりました。

次に、リソースから最初の html ページを手動で読み取り、ベース URL を提供する必要がありました。その後、リソースとして埋め込まれた後続のページとリソースは正常に読み込まれます。

問題のコードは次のとおりです。

QResource res(":/html/index.html");
ui->webView->setHtml(reinterpret_cast<const char *>(res.data()), QUrl("qrc:/html/"));

はどこwebViewですかQWebView。私の .qrc ファイルは次のようになります。

<RCC>
    <qresource prefix="/">
        <file>html/index.html</file>
    </qresource>
</RCC>

これは Qt 5.5.0 で機能します。

于 2015-11-26T15:24:14.293 に答える
0

なぜ使用しないのですか

url: "res/test.html"

それ以外の

url: "qrc:/res/test.html"

?

その後、リソースファイルを使用する必要はありません

于 2013-01-07T21:26:15.633 に答える
-1

Path-To-File を使用するだけで、プロジェクト ディレクトリに保存した場合は、ファイル URL の名前を設定するだけです: "/res/test.html"

& ファイルがプロジェクト ディレクトリにある場合 URL: "test.html"

于 2015-07-08T22:23:38.877 に答える