如何让QWebKit显示图像?

时间:2010-04-28 05:45:42

标签: image qt qwebkit

好的,我在与文件logo.png相同的目录中有一个Qt可执行文件。

我打电话给以下人员:

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

webView->setHtml(msg);

其中webviewQWebKit指针

但是,当我执行程序时,图像不会显示。我正在从图像所在的目录中执行程序... 为什么不显示?这让我疯了!

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

  1. 检查是否使用 png 支持构建Qt。您也可以尝试其他图像格式。
  2. 尝试使用绝对路径。对我而言,这种变体有效:
  3. 示例代码:

    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来编写代码,并 here is 我所拥有的代码。项目文件名为Images.rar。它与MS Visual C ++结合使用。我使用Qt 4.6.2成功地从该存档构建代码。

    您也可以从标准Qt示例文件夹中查看预览器应用程序。在我的主机上,路径是:

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

    希望有所帮助!

答案 2 :(得分:1)

问题是WebKit中的安全限制。

AFAIK背后的想法是阻止来自互联网的HTML页面在硬盘上包含/引用文件,并且出于某种原因,调用setHtml()使得WebKit认为不允许访问HTML磁盘上的文件(使用file://架构)。

我想通过让WebKit知道设置的HTML确实来自硬盘本身并且应该被允许分别访问本地文件来解决这个问题。

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

无法在此处测试,但您可以尝试为 baseUrl 提供类似file://abcd的内容。

此外,缺少PNG支持可能是个问题,因此您应该检查是否在Qt版本中启用了PNG支持。

尝试在网络上引用PNG图片(例如http://files.iconfactory.net/news/CandyBar.png),看看它是否显示。如果是,则支持PNG,问题是WebKit中的安全限制。

答案 3 :(得分:1)

我遇到了同样的问题,最后还是解决了这个问题。

请务必在 QUrl 中提供正确的路径,以便正确阅读图片

例如: C:/xxx/abc.png上的图像文件 - &gt; QUrl 必须类似 C:/ xxx / yyy - &gt; yyy 必须和图像在同一个目录上。

在Qt上调试时,你当前的目录是build目录!不在调试/发布目录..

在exe上,你可以通过调用 QDir :: current()获得真实的当前目录。