gpt4 book ai didi

python - 完全透明的蒙版 -> 完全不透明的小部件

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:29 24 4
gpt4 key购买 nike

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

如果我用一个填充有 Qt.color0QBitmap 调用 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)QRegion 由空位图产生的是空的。所以在 setMask 中使用空位图等同于 widget.setMask(QRegion())。 Qt 假定提供空白区域意味着取消设置掩码。这是合理的,因为除了 isEmpty 之外,QRegion 中没有其他有效性标志。 QWidget::mask 根据文档,当没有设置掩码时返回空区域,因此空 QRegion 显然被视为特殊值,这意味着没有设置掩码。

QWidget::setMask(QRegion) 中:

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

这可能是 Qt 文档中的错误。 QWidget::setMask 文档应该包含关于此的注释。

关于python - 完全透明的蒙版 -> 完全不透明的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com