3

我有一个QGraphicsScene,我在其中插入各种QGraphicsItem对象,如矩形或多边形。这个想法是用一个RectItem表示每个组件的电子图,一个三角形的PolygonItem表示该组件的每个引脚,以及一个PathItem来表示引脚之间的链接。

我很难找到一种方法来正确排列我的项目,因此链接总是隐藏在它们的起始引脚和结束引脚中。将链接隐藏在其起始引脚后面很容易,因为起始引脚始终是链接的父级,因此我可以在创建链接时设置标志QGraphicsItem::ItemStacksBehindParent 。但是对于末端销,我被卡住了。

我试图将我的 pin 的 Z 值设置为它所附加的链接的上级值,或者调用 Qt 函数StackBefore(),但没有结果。文档告诉我,z-order 仅涉及兄弟项目,即共享相同父项或都是顶级项目的项目。但是我所有的组件都是独立的,那么有没有办法改变两个非兄弟项目之间的堆栈顺序?

非常感谢您的帮助。

4

2 回答 2

1

好吧,根据 Riateche 的评论(谢谢),我能够找到解决问题的方法。

为了修改两个非同级项之间的堆叠顺序,并且因为它们没有共同的父项,我不得不更改其最顶层父项的 z 值,即顶级项。我没有试图将我的链接隐藏在它的末端引脚后面,而是制作了整个组件,即包含发出我的链接的引脚的那个,隐藏在另一个组件后面,它是末端引脚的父级。因为这两个组件是顶级项目,所以该setZValue方法有效。

好吧,我同意它并没有真正回答最初的问题,因为最终,我不得不重新考虑这个问题才能使用两个同级/顶级项目,但感觉就像是自然的做事方式,所以。 ..我不认为真的存在改变两个非同级项之间的堆栈顺序的方法。

于 2013-06-20T08:49:46.797 回答
0

我建议在没有父母的情况下创建链接。
然后对所有链接使用一个较低(范围)的 z-index,对所有组件使用一个较高(范围)的 z-index。
这样堆叠总是正确的,并且当图表中有(例如反馈)循环时,您是安全的。

于 2016-08-25T13:34:11.300 回答