1

edit : @eyllanesc のコメントに続いて、github でホストされている最小限の例を次に示します。テストは、OS X 10.12 上の Qt5.9 で実行されます。

ベース HTML

相対パスtest.htmlで画像をロードする HTML の最小限の例を作成しましょう。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
      <div>Image:</div>
      <img src="img.jpg"></img>
  </body>
</html>

このファイルは、 img.jpg (愛らしい子犬の写真である必要があります)を含むフォルダーに作成されます。

test.htmlをブラウザーで直接開くと、期待どおりに画像が表示されます。

 qrc と相対パスの問題

ここで、次の .qrc ファイルを使用して、両方のリソースを Qt アプリケーションに埋め込むとします。

<!DOCTYPE RCC><RCC version="1.0">

<qresource>
    <file alias="test.html">resources/web/test.html</file>
    <file alias="img.jpg">resources/web/img.jpg</file>
</qresource>

</RCC>

QWebEngineView次の形式のコードを使用して、HTML ページを開くことができます。

mWebView->load(QUrl{"qrc:///test.html"});

ページは読み込まれますが、画像は読み込まれません。

(引数 を指定してアプリを実行することにより) Web 開発者コンソールを有効に--remote-debugging-port=8888し、[ネットワーク] タブに移動すると、 img.jpgを読み込もうとしてさえいないことがわかります。

 絶対パスで問題なし

画像要素が に変更された場合<img src="qrc:///img.jpg"></img>、すべてが正常に機能し、画像が読み込まれます。

質問

  • これは設計による qrc システムの制限ですか?
  • それを回避する方法はありますか?(スキームで絶対パスをハードコーディングせずに)
4

2 に答える 2

0

問題を調査したところ、.rccファイル内のすべてのエイリアスを取り除き、それに応じてコード内のリソース パスを変更すると、相対パスを使用できるようになることがわかりました。

ソースの変更点は次のとおりです。

<!DOCTYPE RCC><RCC version="1.0">

<qresource>
    <file>resources/web/test.html</file>
    <file>resources/web/img.jpg</file>
</qresource>

</RCC>

-

mWebView->load(QUrl{"qrc:///resources/web/test.html"});

回避策のように感じるので、この回答はまだ受け入れません。うまくいけば、エイリアスで動作させる方法があります。

于 2017-08-16T14:16:31.157 に答える