好的,我在一個文件logo.png
的同一目錄下有一個Qt可執行文件。如何讓QWebKit顯示圖像?
我調用以下:
QString msg("<html><body><img src='logo.png' /></body></html>");
webView->setHtml(msg);
其中webview
是QWebKit
指針
然而,當我執行程序,圖像不顯示。我從圖像所在的目錄執行程序... 爲什麼它不顯示?這讓我瘋狂!
好的,我在一個文件logo.png
的同一目錄下有一個Qt可執行文件。如何讓QWebKit顯示圖像?
我調用以下:
QString msg("<html><body><img src='logo.png' /></body></html>");
webView->setHtml(msg);
其中webview
是QWebKit
指針
然而,當我執行程序,圖像不顯示。我從圖像所在的目錄執行程序... 爲什麼它不顯示?這讓我瘋狂!
示例代碼:
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
希望它有幫助!
問題是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中的安全性限制。
嘗試訪問HTTP PNG文件 - 沒有問題。 – 2010-05-02 02:55:21
看看Qt WebKit的安全策略。我認爲他們現在有一些關於這方面的文件。 – BastiBen 2010-05-03 16:04:55
+1:使用'baseUrl'參數工作,但只有當我使用絕對路徑似乎。令人煩惱的是,將'QUARl :: fromLocalFile(「。」)'作爲'baseUrl'傳遞不起作用(儘管'QUrl.valid()'爲'QUrl'返回'true')。 – Troubadour 2010-05-06 21:33:08
該標誌。如果沒有給出適當的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();
}
當我有機會時,我會嘗試。 – 2010-05-08 05:53:43
Grrr,'Qdir :: current()',爲什麼我沒想到呢? :) – Troubadour 2010-05-08 09:40:00
我遇到了同樣的問題,終於搞定了。
務必在給正確的路徑QUrl,得到圖像正確讀取
如:上C圖像文件:/xxx/abc.png - > QUrl必須是像C:/xxx/yyy - > yyy必須與圖像位於同一個目錄中。
在Qt上進行調試時,您當前的目錄是build目錄!不在調試/釋放目錄..
在exe文件上,你可以通過調用QDir :: current()來獲得真正的當前目錄。
我仍然無法得到這個工作。我嘗試了絕對路徑,QUrl等。 – 2010-05-02 06:16:25