程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PyQt5 QGraphicsItemGroup 中的子项事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决PyQt5 QGraphicsItemGroup 中的子项事件?

开发过程中遇到PyQt5 QGraphicsItemGroup 中的子项事件的问题如何解决?下面主要结合日常开发的经验,给出你关于PyQt5 QGraphicsItemGroup 中的子项事件的解决方法建议,希望对你解决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,请注明来意。
标签: