我想在我的QWidget上使用mask。我想覆蓋現有的小部件按鈕的排 - 類似Skype的如何在QWidget上使用具有透明度的遮罩?
注意,這些按鈕沒有鋸齒狀邊緣 - 他們是很好的平滑且在它們下面部件仍是可見的。 我試圖完成使用Qt樣式表,但是應該被「掩蓋」的像素只是黑色 - 它是黑色矩形背景上的圓形按鈕。
然後我試圖用QWidget :: mask()來做到這一點。我用下面的代碼
QImage alpha_mask(QSize(50, 50), QImage::Format_ARGB32);
alpha_mask.fill(Qt::transparent);
QPainter painter(&alpha_mask);
painter.setBrush(Qt::black);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(25,25), 24, 24);
QPixmap mask = QPixmap::fromImage(alpha_mask);
widget.setMask(mask.mask());
可悲的是,它會導致以下效果
「邊緣」參差不齊,他們應光滑。我保存了生成的掩碼,以便我可以調查是否是問題
它不是。
我知道Linux的Skype版本確實使用Qt,所以應該可以重現。但是如何?
如何使用反鋸齒QPainter繪製圓?面具總是布爾人,你不能與他們抗鋸齒。 – peppe
我這樣做是爲了獲得初始掩碼(查看代碼示例)。 我不能在本機窗口上繪製QWidget,它取決於Qt。 你是說在paintEvent中有空的QWidget和繪圖圈? – wirher
你可以在後臺使用alpha通道的png圖像。 – Milovidov