1

我正在尝试从网站的 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 线程中使用。

I would just keep the byte array as is and pass it back to the GUI thread. Convert it into a QPixmap then a QIcon when you need to show it. It's not really so heavy a computation anyway.

于 2012-11-12T19:08:08.307 回答