Python 全透明遮罩->;完全不透明小部件

Python 全透明遮罩->;完全不透明小部件,python,qt,qt4,pyside,Python,Qt,Qt4,Pyside,当我试图在PySide中呈现一个完全透明的小部件时,遇到了一个奇怪的情况 如果我使用填充了Qt.color0的QBitmap调用setMask,它会使小部件完全不透明(而不是像我预期的那样完全透明) 放入单个像素的Qt.color会导致预期的行为:小部件变得完全透明,而不是单个像素 下面是一个简单的例子。将变量single_pixel更改为True将填充左上角的像素,从而使遮罩按预期开始工作 你知道这是怎么回事吗 import sys from PySide import QtCore, QtG

当我试图在
PySide
中呈现一个完全透明的小部件时,遇到了一个奇怪的情况

如果我使用填充了
Qt.color0
QBitmap
调用
setMask
,它会使小部件完全不透明(而不是像我预期的那样完全透明)

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

下面是一个简单的例子。将变量
single_pixel
更改为
True
将填充左上角的像素,从而使遮罩按预期开始工作

你知道这是怎么回事吗

import sys
from PySide import QtCore, QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(200, 200)
widget.show()

bitmap = QtGui.QBitmap(widget.size())
bitmap.clear()

single_pixel = False
if single_pixel:
    painter = QtGui.QPainter()
    painter.begin(bitmap)
    painter.setPen(QtCore.Qt.color1)
    painter.drawPoint(0,0)
    painter.end()

widget.setMask(bitmap)

sys.exit(app.exec_())
QWidget::setMask(QBitmap)
QBitmap
转换为
QRegion
并调用
QWidget::setMask(QRegion)
<空位图生成的代码>区域为空。因此,在
setMask
中使用空位图等于
widget.setMask(QRegion())
。Qt假设提供空区域意味着取消设置掩码。这是合理的,因为除了
isEmpty
之外,
QRegion
中没有其他有效性标志
QWidget::mask
根据文档未设置掩码时返回空区域,因此空QRegion显然被视为一个特殊值,表示未设置掩码

QWidget::setMask(QRegion)
中:

这可能是Qt文档中的一个bug
QWidget::setMask
文档应该包含关于此的注释

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