1

Web サイトの favicon.ico ファイルから QIcon オブジェクトを作成しようとしています。このダウンロードは必ずしも GUI スレッドで行われるとは限らないため、QPixmap を使用することはできません。これまでのところ、QPixmap を使用せずに QImage から QIcon に変換する方法を見つけることができず、QImageReader などを使用することはできません。

次のコードが機能するようになりました。

QUrl url("http://www.google.com/favicon.ico");
QNetworkRequest request(url);

QNetworkReply* pReply = manager.get(request);

// ... code to wait for the reply ...

QByteArray bytes(pReply->readAll());

QFile file("C:/favicon.ico");
file.open(QIODevice::WriteOnly);
file.write(bytes);
file.close();

QIcon icon("C:/favicon.ico");
return icon;

ただし、一時ファイルの書き込みは避けたいです。だから私は次のようなことを試しました...

QBuffer buffer(&bytes);
buffer.open(QIODevice::ReadOnly);
QDataStream ds(&buffer);

QIcon icon;
ds >> icon;

しかし、それはうまくいきません。

誰か提案はありますか?

4

1 に答える 1

2

QDataStreamストリームからの PNG 画像を期待しているため、機能しません。

一時ファイルのアプローチも使用しませんQPixmap。ボンネットの下でまだ構築されている可能性があるためです。実際、QIconスレッドセーフであるとは保証されていないため、非 GUI スレッドでの使用は避ける必要があります。

バイト配列をそのままにして、GUI スレッドに戻します。表示する必要がある場合は、QPixmap に変換してから QIcon に変換します。とにかく、それほど重い計算ではありません。

于 2012-11-12T19:08:08.307 に答える