2010-04-28 28 views
6

好的,我在一個文件logo.png的同一目錄下有一個Qt可執行文件。如何讓QWebKit顯示圖像?

我調用以下:

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

webView->setHtml(msg); 

其中webviewQWebKit指針

然而,當我執行程序,圖像不顯示。我從圖像所在的目錄執行程序... 爲什麼它不顯示?這讓我瘋狂!

+0

我仍然無法得到這個工作。我嘗試了絕對路徑,QUrl等。 – 2010-05-02 06:16:25

回答

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和here is我已經得到了。項目文件名爲Images.rar。它與MS Visual C++結合在一起。我使用Qt 4.6.2成功構建了該存檔的代碼。

你也可以看看預覽器應用程序從標準的Qt示例文件夾。在我的主機上的路徑是:

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

希望它有幫助!

1

問題是WebKit中的安全限制。

AFAIK背後的想法是阻止來自互聯網的HTML頁面在硬盤上包含/引用文件,並且由於某種原因,調用太setHtml()使WebKit認爲不允許HTML訪問磁盤(使用file://架構)。

我想我通過讓WebKit知道設置的HTML確實來自硬盤本身並應該允許分別訪問本地文件。

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

不能在這裏和現在測試它,但你可以嘗試給的baseUrlfile://abcd

此外,缺乏PNG支持可能是一個問題,因此您應該檢查您的Qt版本中是否啓用了PNG支持。

嘗試引用網絡上的PNG圖像(例如http://files.iconfactory.net/news/CandyBar.png),並查看它是否顯示。如果確實如此,則支持PNG,問題在於WebKit中的安全性限制。

+0

嘗試訪問HTTP PNG文件 - 沒有問題。 – 2010-05-02 02:55:21

+0

看看Qt WebKit的安全策略。我認爲他們現在有一些關於這方面的文件。 – BastiBen 2010-05-03 16:04:55

+0

+1:使用'baseUrl'參數工作,但只有當我使用絕對路徑似乎。令人煩惱的是,將'QUARl :: fromLocalFile(「。」)'作爲'baseUrl'傳遞不起作用(儘管'QUrl.valid()'爲'QUrl'返回'true')。 – Troubadour 2010-05-06 21:33:08

10

該標誌。如果沒有給出適當的baseUrl,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(); 
} 
+0

當我有機會時,我會嘗試。 – 2010-05-08 05:53:43

+0

Grrr,'Qdir :: current()',爲什麼我沒想到呢? :) – Troubadour 2010-05-08 09:40:00

1

我遇到了同樣的問題,終於搞定了。

務必在給正確的路徑QUrl,得到圖像正確讀取

如:上C圖像文件:/xxx/abc.png - > QUrl必須是像C:/xxx/yyy - > yyy必須與圖像位於同一個目錄中。

在Qt上進行調試時,您當前的目錄是build目錄!不在調試/釋放目錄..

在exe文件上,你可以通過調用QDir :: current()來獲得真正的當前目錄。