如何解决python Pyqt setCompositionMode
我已经能够绘制图像的透明通道,现在我遇到了问题。如何通过画笔重新显示透明区域?
虽然我使用了 setcompositionmode
等常量,但它们无法通过画笔重新显示。谁能帮我解决问题?非常感谢。
class parentItem(QGraphicsItem):
__image = None
__pos = QPoint(0,0)
def __init__(self,image: QImage):
super(parentItem,self).__init__()
self.setFlag(QGraphicsItem.ItemIsSelectable,True)
image.convertTo(QImage.Format_ARGB32_Premultiplied)
self.__image = image
self.painter = QPainter()
def paint(self,painter: QPainter,option,widget):
painter.drawImage(0,self.__image)
self.painter.begin(self.__image)
self.painter.setCompositionMode(QPainter.CompositionMode_DestinationOut)
radialGrad = QRadialGradient(self.__pos,80)
radialGrad.setColorAt(0,QColor(255,255,255))
radialGrad.setColorAt(1,0))
brush = QBrush(radialGrad)
self.painter.setBrush(brush)
self.painter.setPen(Qt.nopen)
self.painter.drawEllipse(self.__pos,80,80)
self.painter.end()
def mousepressEvent(self,event: 'QGraphicsSceneMouseEvent') -> None:
super(parentItem,self).mousepressEvent(event)
self.__pos = event.scenePos()
def mouseMoveEvent(self,self).mouseMoveEvent(event)
self.__pos = event.scenePos()
self.update()
def mouseReleaseEvent(self,self).mouseReleaseEvent(event)
def boundingRect(self) -> QtCore.QRectF:
if self.__image is not None:
return QRectF(self.__image.rect())
else:
return QRectF(0,0)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(800,600)
w.setwindowTitle('draw')
w.show()
layout = QVBoxLayout()
view = QGraphicsView()
view.setobjectName('view')
view.setStyleSheet("background-color:gray;")
scene = QGraphicsScene()
view.setScene(scene)
path = "G:/ddd.png"
pItem = parentItem(QImage(path))
scene.addItem(pItem)
layout.addWidget(view)
w.setLayout(layout)
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。