У меня есть письмо, которое содержит идеально отформатированный html с единственным исключением, что изображения связаны по-другому: <img width=456 height=384 id="_x0000_i1026" src="cid:[email protected]" alt="cid:[email protected]">
email имеет другие части, включая изображение с этим идентификатором содержимого. Проблема в том, что я не знаю, как указать QWebview на данные (которые у меня есть). Есть ли способ добавить изображение в его кеш?Как отображать изображения с электронной почты с помощью QWebView?
ответ
Это возможно, но не легко. В основном вам нужно:
1- предоставить свой собственный QNetworkAccessManager
-inherited класса, перекрывая createRequest()
поймать эти ссылки ссылаются на "cid"
:
QNetworkReply*
MyManager::createRequest (Operation op,
const QNetworkRequest & req,
QIODevice * outgoingData = 0)
{
if (op==GetOperation && req.url().scheme() == "cid")
return MyNetworkReply(req.url().path());
else
return QNetworkAccessManager::createRequest(op, req, outgoingData);
}
-Подключите его к WebView с:
MyManager* manager = new MyManager;
view->page()->setNetworkAccessManager(manager);
3- Обеспечить реализацию MyNetworkReply
, которая наследует от QNetworkReply
, a QIODevice
-класс. И это сложная часть. Вы должны обеспечить, по крайней мере readData()
, bytesAvailable()
, конструктором, который устанавливает ответ в терминах HTTP заголовков, и запускает фактическое асинхронное чтение с QTimer::singleShot()
-Расшифруйте крепление (вероятно, из base64
, если это картинка) в a QByteArray
для вашего MyNetworkReply::readData()
, чтобы прочитать это.
Полный текст на qt.gitorious.org
написан Qt Labs разработчиками в Qt 4.6 дней. Они отображают внутренне сгенерированный PNG, а не внешнее почтовое приложение, но общие шаги описаны выше. См:
http://qt.gitorious.org/qt-labs/graphics-dojo/blobs/master/url-rendering/main.cpp
Однако этот код имеет недостаток с Qt-4.8. в конструкторе RendererReply
, когда он делает:
open(ReadOnly|Unbuffered);
это должно быть:
open(ReadOnly);
иначе WebKit никогда не считывает все данные и отображает значок сломанного изображения.
- 1. Отображать заголовки электронной почты в электронной почте с помощью JavaScript
- 2. Изолирование прикрепленного изображения с помощью электронной почты с помощью php
- 3. Вложение изображения в QWebView с помощью JavaScript
- 4. Как отправить встроенные изображения с помощью электронной почты sendgrid?
- 5. Как отображать изображения электронной почты на компоненте Pbear Html viewer?
- 6. вычислить хэш электронной почты для электронной почты с помощью sha256
- 7. Как отобразить html с помощью QWebView. Python?
- 8. Как безопасно отображать адрес электронной почты (spamproof)
- 9. Как с помощью электронной почты в Parse?
- 10. Как получить домен с помощью электронной почты
- 11. Вставить изображения в HTML-адрес электронной почты с помощью Xamarin.iOS
- 12. Отправка электронной почты с помощью электронной почты с помощью google-форм с использованием скрипта google
- 13. Перспективы электронной почты электронной почты С вложением
- 14. Как отображать сообщения электронной почты в Tkinter?
- 15. отправки сообщений электронной почты с помощью PHP
- 16. Как удалить «через» из электронной почты с помощью почты()
- 17. Как отображать изображения с помощью typeahead.js?
- 18. Как отображать изображения с помощью Zend?
- 19. Как отображать изображения с помощью функции?
- 20. Как отображать изображения с помощью django-ckeditor?
- 21. Как отображать изображения с помощью сервера node.js?
- 22. Как отображать изображения с помощью CodeIgniter
- 23. Отправка почты с использованием службы электронной почты Amazon (простая служба электронной почты) с помощью CodeIgniter
- 24. AWS Route 53 настройка электронной почты с помощью EC2 ИЛИ провайдера электронной почты/электронной почты
- 25. Ошибка проверки электронной почты с помощью UserID
- 26. Как отображать изображение в заголовке почты с помощью wp_mail()
- 27. Отправка электронной почты с помощью скрипта perl
- 28. отправка электронной почты с изображениями
- 29. Отправка электронной почты с помощью аппликатора, стероидов
- 30. Подтверждение электронной почты пользователя с помощью парса
Как обойти всех, кто может попробовать это: кеш НЕ используется, если вы явно не назовете его самим. Значит, вам все равно придется реализовать QNetworkAccessManager, а не только новый объект кеша. Хотя для меня флаг «Небуферизованный» не вызывает ошибку, этот ответ сказал, что это так. Тем не менее, большая благодарность за помощь. – chacham15
Хотя я заметил, что у меня не было полной загрузки изображений, когда я опустил раздел 'setHeader (QNetworkRequest :: ContentTypeHeader, QVariant (« image/png »)). – chacham15