2009-09-25 109 views
0

我試圖在QAction中設置透明圖標,然後將其添加到菜單和工具欄中。我正在用樣式表設計應用程序。圖標透明度可以工作,但圖標正在工具欄上繪製,看起來像圖標左側和頂部邊緣的1px黑色邊框。工具欄上的透明圖標畫出醜陋的邊框

現在,我所有的圖標都存儲在一個大的圖像文件(PNG,具有透明度) - 它們被保存在一個大的條狀圖中。要解壓縮到一個單一的QIcon,我這樣做:

// load icon strip: 
QPixmap large; 
large.load(":/icons/tb_icons_l.png", "PNG", Qt::OrderedAlphaDither); 
QSize largeSize(large.width()/ICON_COUNT, large.height()); 

// create individual icon pixmap 
QPixmap iconLarge(largeSize); 
// fill with transparent pixels: 
iconLarge.fill(QColor(0,0,0,0)); 
// copy pixel data from icon strip to image: 
{ 
    QPainter p(&iconLarge); 
    p.setBackgroundMode(Qt::TransparentMode); 
    p.drawPixmap(0,0,large, largeSize.width() * i, 0, largeSize.width(), largeSize.height()); // 'i' is the icon index. 
} 

return QIcon(iconLarge); 

我知道問題出在幾行字上面,因爲當我加載從單個文件圖標來代替這一切完美的作品(無黑邊)。

以前有沒有其他人看過類似的東西?任何人都可以提出一些改變,將刪除難看的黑色邊框?邊框絕對是圖像的一部分,而不是工具欄按鈕本身的一部分。

回答

1

首先,我認爲你是以一種不必要的複雜方式來做事情,把它們放在一個圖像中。然而...

你運行的是哪個版本的Qt?在什麼平臺上?在大約6-12個月前的一段時間(我認爲),我遇到了一個錯誤,即在另一個透明圖像上繪製一個透明圖像作爲QPixmaps。據我所知,其中一些像素會變成其他顏色。這是在Linux上,Qt4.4或4.5(我不記得)。無論它是哪一個,我都提交了一個錯誤報告,它被認爲是一個迴歸,並在下一個錯誤修復版本中得到修復。這意味着如果你沒有使用最新版本,你可能會更新到最新版本。 (解決方法是將其繪製到QImage上,然後在需要時將其轉換爲QPixmap。)

或者,您可以嘗試測試,在哪裏擺脫索引,然後只加載一個您認識的圖像進入畫家的大小,看看你是否可以簡化你的代碼,並仍然重現問題。

+0

我在Linux下運行最新的Qt 4.5。 – Thomi

+0

謝謝 - 你是對的。有一個我沒有看到的新bug修復版本。更新解決了問題。乾杯!至少我的代碼不是怪罪! – Thomi