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文档中的一个bugQWidget::setMask
文档应该包含关于此的注释
d->extra->mask = newMask;
d->extra->hasMask = !newMask.isEmpty();