大佬教程收集整理的这篇文章主要介绍了PyQt5 QGraphicsItemGroup 中的子项事件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个图形项目组 - 3 个矩形和文本。
我想让文本可编辑,但不能。焦点设置在文本上,但仍然无法编辑。试图设置父组停止处理子事件,但不起作用
class Uml(QGraphicsItemGroup):
def __init__(self,x,y,scene):
super().__init__()
self.setFiltersChildEvents(False)
self.headerR = QGraphicsRectItem(x,70,30)
self.header = qgraphicstextitem("header")
self.header.setPos(x,y)
self.header.setTextInteractionFlags(Qt.TextEditorInteraction)
self.attrR = QGraphicsRectItem(x,y+30,50)
self.attr = qgraphicstextitem("attributes")
self.attr.setPos(x,y+30)
self.methodsR = QGraphicsRectItem(x,y+80,50)
self.methods = qgraphicstextitem("methods")
self.methods.setPos(x,y+80)
self.addToGroup(self.headerR)
self.addToGroup(self.header)
self.addToGroup(self.attrR)
self.addToGroup(self.attr)
self.addToGroup(self.methodsR)
self.addToGroup(self.methods)
scene.addItem(self)
self.setFlag(QGraphicsItem.ItemIsMovable,True)
几乎每次我尝试使用 QGraphicsGroupItem 时,我都以放弃它而告终,因为它们的行为(尤其是与输入事件相关时)通常不可靠,而且根据我的研究,我并不是唯一遇到这些问题的人。
如果您只需要通过一个共同的祖先“分组”所有项目,那么创建 QGraphicsItem 的子类并将项目创建为它的子类会更容易和可靠,这可以通过添加父项作为构造函数的参数来完成,或使用 setParentItem()
。然后,由于抽象的 QGraphicsItem 需要同时实现 boundingRect()
和 paint()
,因此您只需要为第一个返回 childrenBoundingRect()
,第二个只需返回 pass
。>
在以下重写您的代码时,我冒昧地将“标签”重新设置为它们所指的矩形的父级,这更有意义。
此外,除非您确实需要,否则通常最好避免在基本形状项(如 QGraphicsRectItem、QGraphicsEllipseItem 等)中设置相对位置,因为它会使坐标引用比应有的更复杂:请记住,始终在坐标处创建项{ {1}},当您使用 (0,0)
创建 QGraphicsRectItem 时,(x,y,width,height)
和 x
指的是项目的矩形,不是 项目的位置,在手动更改之前仍为 y
。
(0,0)
以上是大佬教程为你收集整理的PyQt5 QGraphicsItemGroup 中的子项事件全部内容,希望文章能够帮你解决PyQt5 QGraphicsItemGroup 中的子项事件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。