我正在try 创建带有边框的多边形,并在鼠标光标位于其上方时更改其 colored颜色 .当我创建多个多边形并将边界大小设置为大于4时出现问题.第一个多边形运行正常,但对于其他多边形边界的内半部分似乎被视为不属于该多边形,因为在到达该位时会触发hoverLeaveEvent().
我可以不画边框,而是在已有的边框上使用额外的多边形,或者绘制线条,但这会变得有点混乱.我想知道是否有一种方法可以在不创建额外项目的情况下解决这个问题.
以下是显示该问题的一小段示例代码.如果设置边框宽度>;5,则效果更好
from PyQt6.QtWidgets import QMainWindow, QGraphicsScene, QGraphicsView, QGraphicsPolygonItem, QApplication
from PyQt6.QtGui import QColor, QPolygonF, QBrush, QPen
from PyQt6.QtCore import QPointF
class Polygon(QGraphicsPolygonItem):
def __init__(self, parent):
super().__init__(parent)
self.setBrush(QBrush(QColor(255, 0, 0, 120)))
self.setPen(QPen(QColor(255, 0, 0), 10))
self.setAcceptHoverEvents(True)
def hoverEnterEvent(self, event):
self.setBrush(QBrush(QColor(255, 0, 0, 250)))
def hoverLeaveEvent(self, event):
self.setBrush(QBrush(QColor(255, 0, 0, 120)))
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setGeometry(200, 0, 500, 600)
self.canvas = QGraphicsView()
self.canvas.setScene(QGraphicsScene(self))
polygon = QPolygonF([
QPointF(0, 0),
QPointF(100, 0),
QPointF(100, 100),
QPointF(0, 100)
])
self.polygon_item = Polygon(polygon)
self.canvas.scene().addItem(self.polygon_item)
polygon = QPolygonF([
QPointF(110, 110),
QPointF(150, 160),
QPointF(200, 250),
QPointF(200, 100)
])
self.polygon_item = Polygon(polygon)
self.canvas.scene().addItem(self.polygon_item)
polygon = QPolygonF([
QPointF(0, 200),
QPointF(0, 300),
QPointF(100, 300),
QPointF(100, 200)
])
self.polygon_item = Polygon(polygon)
self.canvas.scene().addItem(self.polygon_item)
self.setCentralWidget(self.canvas)
if __name__ == '__main__':
app = QApplication([])
win = MyWindow()
win.show()
app.exec()