7

さて、ファイルと同じディレクトリに Qt 実行可能ファイルがありますlogo.png

私は次のように呼びます:

QString msg("<html><body><img src='logo.png' /></body></html>");

webView->setHtml(msg);

ポインタwebviewはどこですかQWebKit

しかし、プログラムを実行すると、画像が表示されません。画像があるディレクトリからプログラムを実行しています...なぜ表示されないのですか? これは私を夢中にさせています!

4

4 に答える 4

10

適切な baseUrl が指定されていない場合、logo.png が正しく解決されない場合があります。

ここに例があります。アプリケーションは logo.png を含むディレクトリから実行する必要がありますが、dummy.html が存在する必要はありません。適切な baseUrl を提供するために使用されます。

#include <QtCore>
#include <QtGui>
#include <QtWebKit>

int main(int argc, char * argv[])
{
    QApplication app(argc, argv);

    QUrl baseUrl = QUrl::fromLocalFile(QDir::current().absoluteFilePath("dummy.html"));

    QString msg("<html><body><img src='logo.png' /></body></html>");

    QWebView *webView = new QWebView;
    webView->setHtml(msg, baseUrl);

    webView->show();

    return app.exec();
}
于 2010-05-08T05:49:44.867 に答える
1

私は同じ問題を抱えていましたが、最終的に解決しました。

画像を正しく読み取るために、 QUrlに正しいパスを指定してください

例: C:/xxx/abc.png の画像ファイル -> QUrlは C:/xxx/yyy のようなものである必要があります-> yyyは画像と同じディレクトリにある必要があります。

Qt でデバッグしている間、現在のディレクトリはビルド ディレクトリです。デバッグ/リリースディレクトリではありません..

exe では、QDir::current()を呼び出して実際の現在のディレクトリを取得します。

于 2011-05-28T17:42:59.620 に答える
1
  1. Qt ビルドがpngをサポートしているかどうかを確認します。また、他の画像形式を試すこともできます。
  2. 絶対パスを使用してみてください。私にとって、そのバリアントは機能します:

サンプルコード:

if (isPictureDirExists)
    text.replace(QString("src=\""), QString("src=\"%1/img/")
        .arg(conf.absImgFolder), Qt::CaseInsensitive);

QString html = QString("<html><head><meta Content=\"Text/html; " \
                       "CHARSET=Windows-1251\"></head><body>%1</body>" \
                       "</html>").arg(text);
webView->setHtml(html);

幸運を。

追加: 巨大なプロジェクトから QWebkit を使用してコードをスクラッチしようとしましたが、これが得られたものです。Images.rar というプロジェクト ファイル。MS Visual C++ と組み合わされています。Qt 4.6.2 を使用して、そのアーカイブからコードを正常にビルドできます。

また、標準の Qt サンプル フォルダーからプレビューアアプリを確認することもできます。私のホストでは、パスは次のとおりです。

C:\Qt\4.6.2\examples\webkit\previewer 

それが役立つことを願っています!

于 2010-04-28T06:30:45.137 に答える
1

問題は、WebKit 内のセキュリティ制限です。

私の知る限り、その背後にあるアイデアは、インターネットからのHTMLページがハードディスク上のファイルをインクルード/参照するのを防ぐことです。何らかの理由で呼び出しもsetHtml()、HTMLがディスク上のファイルにアクセスすることを許可してはならないとWebKitに思わせます(file://スキーマを使用) )。

設定されたHTMLが実際にハードディスク自体から来ており、それぞれローカルファイルへのアクセスを許可する必要があることをWebKitに知らせることで、これを回避したと思います。

void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )

ここでテストすることはできませんが、baseUrlfile://abcd.

また、PNG のサポートがないことが問題になる可能性があるため、Qt ビルドで PNG のサポートが有効になっているかどうかを確認する必要があります。

Web 上の PNG 画像 (たとえばhttp://files.iconfactory.net/news/CandyBar.png) を参照してみて、それが表示されるかどうかを確認します。ある場合、PNG はサポートされており、問題は WebKit 内のセキュリティ制限です。

于 2010-04-28T12:29:32.543 に答える