Хорошо, у меня есть спокойный исполняемый файл в том же каталоге как файл logo.png
.
Я называю следующее:
QString msg("<html><body><img src='logo.png' /></body></html>");
webView->setHtml(msg);
где webview
QWebKit
указатель
Однако, когда я выполняю программу, изображение не отображается. Я выполняю программу из каталога, в котором находится изображение..., почему это не отобразится? Это сводит меня с ума!
Проблема заключается в ограничениях безопасности внутри WebKit.
Насколько я знаю, идея заключается в том, чтобы запретить HTML-страницы из Интернета включать / ссылаться на файлы на жестком диске, и по какой-то причине вызов setHtml ()
заставляет WebKit думать, что HTML не должен получить доступ к файлам на диске (с использованием схемы file: //
).
Думаю, я решил эту проблему, сообщив WebKit, что установленный HTML-код действительно исходит от самого жесткого диска и должен иметь доступ к локальным файлам соответственно.
void QWebView :: setHtml (const QString & html, const QUrl & baseUrl = QUrl ())
Невозможно проверить это здесь и сейчас, но вы можете попытаться дать baseUrl что-то вроде файл: // abcd
.
Кроме того, отсутствие поддержки PNG может быть проблемой, поэтому вам следует проверить, включена ли поддержка PNG в вашей сборке Qt.
Попробуйте сослаться на изображение PNG в Интернете (например, http://files.iconfactory.net/news/CandyBar.png
) и посмотрите, появится ли оно. Если это так, то PNG поддерживается, и проблема заключается в ограничениях безопасности в WebKit.
Пример кода:
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
Надеюсь, это поможет!
Файл logo.png не может быть разрешен должным образом, если не указан соответствующий baseUrl.
Вот пример. Обратите внимание, что приложение должно запускаться из каталога, содержащего 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();
}