好的,我在一个文件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