2012-08-07 79 views
1

我想在我的QT應用程序中有一個帶有圖標圖像形狀的按鈕。我試圖通過使用Alpha通道從使用的圖像(.png)中獲取蒙版來設置按鈕蒙版。Set Qt Widget mask

這裏有興趣的代碼行:

QPushButton button(); 
QPixmap pixmap("image_path.png"); 
QIcon icon(pixmap); 
button.setIcon(icon); 
button.setMask(pixmap.createMaskFromColor(Qt::transparent,Qt::MaskInColor)); 

結果是按鈕消失!

通過做一些測試,我敢肯定,該掩模是正確創建的,錯誤在哪裏?

+1

這是你正在使用的確切代碼?上面的代碼片斷表明你正在堆棧上創建'QPushButton'(如果你不想在引用超出範圍之後立即刪除它,你需要將它關閉)。你也沒有爲你的按鈕指定一個父'QWidget'。 – sjwarner 2012-08-07 14:23:51

+0

嗨sjwarner,謝謝你的回覆! 我寫的代碼並不完全是我在我的應用程序中使用的代碼,其中按鈕是在定義爲類的私有成員的QPushButton指針中創建的,我只是在這裏寫了這些行來報告問題。然而,在這種情況下,儘管按鈕,像素圖和圖標全部分配在堆棧中,但它們不應該立即被破壞,而應當在示波器的出口處... – 2012-08-08 08:25:28

+0

我剛剛嘗試使用.png圓形更改按鈕圖片透明背景上的紅色形狀,我得到了一個非常奇怪的三角形面具,所以我認爲這個問題不在代碼上,而是在函數crateMask()如何工作。 有沒有其他方法可以獲得自定義形狀的按鈕?我發現只有其他的例子使用createMask()和createEhuristicMask()函數,但這第二個不適用於我的應用程序... – 2012-08-08 08:26:32

回答

4


如果您使用的是巴紐阿爾法像這樣的:
transparent png
你可以設置它的形狀像這樣的面具:

QPushButton button; 
button.resize(50,50); 
button.show(); 

QPixmap mask("D:/shape.png"); 
button.setMask(mask.mask()); 

你將有一個像結果:
result shape button

+0

好吧,這是我第一次嘗試的方式,但它沒有工作! 在我的應用程序中,QPixmap蒙版結果很奇怪......我也嘗試過使用僅由全色正規形狀(圓圈)和完全透明度組成的虛擬圖片,但結果相同。 在這一點上,我認爲這可能是Linux下Qt 4.6.3(64位)的一個bug。 – 2012-08-10 11:37:27