尝试在PySide
中渲染完全透明的小部件时遇到了一个奇怪的角落。
如果我使用填充了setMask
的{{1}}来呼叫QBitmap
,则会使窗口小部件完全不透明(而不是像我期望的那样完全透明)。
放入Qt.color0
的单个像素会导致预期的行为:小部件变得完全透明而不是单个像素。
以下是一个最小的例子。将变量Qt.color
更改为single_pixel
会填充左上角的像素,这会导致蒙版按预期开始工作。
有什么想法在这里发生了什么?
True
答案 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
个文档应包含有关此内容的说明。