2012-11-11 46 views
1

我試圖從網站的favicon.ico文件創建一個QIcon對象。由於此下載不一定發生在GUI線程上,因此我無法使用QPixmap,到目前爲止,我還沒有計算出如何在不使用QPixmap的情況下從QImage轉換爲QIcon,所以我不能使用像QImageReader這樣的東西。將favicon.ico轉換爲QIcon而不使用QPixmap

我已經得到了下面的代碼工作:

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

它是如何工作的?你有運行時錯誤嗎?如果是這樣,那麼錯誤是什麼。 –

+0

沒有運行時錯誤。我在QTreeView中使用返回的QIcon,添加一個QStandardItem並將圖標傳遞給我創建的項目。正如我所提到的,當我將QByteArray寫入臨時文件然後使用該文件初始化QIcon時,這會起作用。當我使用QDataStream方法時,沒有圖標顯示在樹中。 – Addy

回答

2

QDataStream不起作用,因爲它期望從流中獲取PNG圖像。

我不會使用臨時文件方法,因爲它仍然可以在底層構建QPixmap。實際上,QIcon不保證是線程安全的,應該避免在非GUI線程中使用。

我只是保持字節數組原樣並將其傳回GUI線程。將它轉換爲QPixmap,然後在需要顯示時將其轉換爲QIcon。無論如何,這並不算太重。

相關問題