在不使用QPixmap的情况下将favicon.ico放入QIcon

时间:2012-11-11 16:04:29

标签: qt qt4 qicon

我正在尝试从网站的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;

但这并不奏效。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

QDataStream不起作用,因为它期待来自流的PNG图像。

我不会使用临时文件方法,因为它仍然可以构建一个QPixmap。实际上,QIcon不保证是线程安全的,应该避免在非GUI线程中使用。

我只是将字节数组保持原样并将其传递回GUI线程。当您需要显示它时,将其转换为QPixmap,然后转换为QIcon。无论如何,计算并不是那么重。