我正在尝试从网站的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;
但这并不奏效。
有人有任何建议吗?
答案 0 :(得分:2)
QDataStream
不起作用,因为它期待来自流的PNG图像。
我不会使用临时文件方法,因为它仍然可以构建一个QPixmap
。实际上,QIcon
不保证是线程安全的,应该避免在非GUI线程中使用。
我只是将字节数组保持原样并将其传递回GUI线程。当您需要显示它时,将其转换为QPixmap,然后转换为QIcon。无论如何,计算并不是那么重。