画像のリンクが異なるという 1 つの例外を除いて、完全にフォーマットされた html を含む電子メールがあります。電子メールに<img width=456 height=384 id="_x0000_i1026" src="cid:X.MA2.1374935634@aol.com" alt="cid:X.MA4.1372453963@aol.com">
は、このコンテンツ ID を持つ画像を含む他の部分があります。問題は、QWebview をデータ (私が持っている) に向ける方法がわからないことです。画像をキャッシュに追加する方法はありますか?
1 に答える
可能ですが、簡単ではありません。基本的に、次のことを行う必要があります。
1- を参照するこれらのリンクをキャッチするためQNetworkAccessManager
にオーバーライドして、独自の継承クラスを提供します。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);
}
2-次を使用してwebviewに接続します。
MyManager* manager = new MyManager;
view->page()->setNetworkAccessManager(manager);
3-クラスMyNetworkReply
から継承QNetworkReply
する実装を提供しQIODevice
ます。そして、これは複雑な部分です。HTTP ヘッダーに関して応答をセットアップし、実際の非同期読み取りを開始するコンストラクターをreadData()
少なくとも提供する必要があります。bytesAvailable()
QTimer::singleShot()
4-添付ファイル(おそらくbase64
画像の場合)をデコードして、そこから読み取れるようにQByteArray
します。MyNetworkReply::readData()
Qt 4.6 日の間にQt Labsqt.gitorious.org
開発者によって書かれた完全な例があります。外部メールの添付ファイルではなく、内部で生成された 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 がデータ全体を読み取ることができず、壊れた画像のアイコンが表示されます。