Как получить QWebKit к изображению на дисплее?

Хорошо, у меня есть спокойный исполняемый файл в том же каталоге как файл logo.png.

Я называю следующее:

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

webView->setHtml(msg);

где webview QWebKit указатель

Однако, когда я выполняю программу, изображение не отображается. Я выполняю программу из каталога, в котором находится изображение..., почему это не отобразится? Это сводит меня с ума!

7
задан Nathan Osman 28 April 2010 в 06:08
поделиться

3 ответа

Проблема заключается в ограничениях безопасности внутри 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.

1
ответ дан 6 December 2019 в 19:34
поделиться
  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 из моего огромного проекта, и вот то, что у меня есть. Файл проекта под названием Images.rar. Он сочетается с MS Visual C ++. Я успешно создаю код из этого архива с помощью Qt 4.6.2.

Также вы можете посмотреть приложение превью из стандартной папки примеров Qt. На моем хосте путь следующий:

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

Надеюсь, это поможет!

1
ответ дан 6 December 2019 в 19:34
поделиться

Файл 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();
}
10
ответ дан 6 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: