完全透明的面膜 - >完全不透明的小部件

时间:2013-12-22 17:43:04

标签: python qt qt4 pyside

尝试在PySide中渲染完全透明的小部件时遇到了一个奇怪的角落。

如果我使用填充了setMask的{​​{1}}来呼叫QBitmap,则会使窗口小部件完全不透明(而不是像我期望的那样完全透明)。

放入Qt.color0的单个像素会导致预期的行为:小部件变得完全透明而不是单个像素。

以下是一个最小的例子。将变量Qt.color更改为single_pixel会填充左上角的像素,这会导致蒙版按预期开始工作。

有什么想法在这里发生了什么?

True

1 个答案:

答案 0 :(得分:3)

QWidget::setMask(QBitmap)QBitmap转换为QRegion并致电QWidget::setMask(QRegion)。空位图生成的QRegion为空。因此,在setMask中使用空位图等于widget.setMask(QRegion())。 Qt假设提供空区域意味着不设置掩码。这是合理的,因为除了QRegion之外,isEmpty中没有其他有效性标记。当根据文档没有设置掩码时,QWidget::mask返回空区域,因此空QRegion显然被视为特殊值,意味着没有设置掩码。

QWidget::setMask(QRegion)

d->extra->mask = newMask;
d->extra->hasMask = !newMask.isEmpty();

这可能是Qt文档中的一个错误。 QWidget::setMask个文档应包含有关此内容的说明。