【发布时间】:2013-06-19 15:19:11
【问题描述】:
我有一个 QGraphicsScene,我在其中插入各种 QGraphicsItem 对象,例如矩形或多边形。这个想法是用一个 RectItem 表示每个组件的电子图,一个三角形的 PolygonItem 表示该组件的每个引脚,以及一个 PathItem 表示引脚之间的链接。
我很难找到正确排列我的项目的方法,因此链接总是隐藏在它们的起始引脚和结束引脚中。将链接隐藏在其起始引脚后面很容易,因为起始引脚始终是链接的父级,因此我可以在创建链接时设置标志 QGraphicsItem::ItemStacksBehindParent。但是对于末端引脚,我被卡住了。
我尝试将我的 pin 的 Z 值设置为它所附加的链接的上级值,或者调用 Qt 函数StackBefore(),但没有结果。文档告诉我,z-order 只涉及兄弟项目,即共享相同父项或都是顶级项目的项目。但是我所有的组件都是独立的,那么有没有办法改变两个非兄弟项目之间的堆栈顺序?
非常感谢您的帮助。
【问题讨论】:
-
也许你应该使用一些自定义算法手动计算每个项目的 z-index,然后只使用
QGraphicsItem::setZValue? -
@Riateche 你的意思是这样的吗?
/** * Add the given link to the list of attached links (if it wasn't already added before) * @param l the link to add */ void Pin::addLink(Link * l) { if(!mLinks.contains(l)) { mLinks.append(l); if(l->zValue() >= zValue()) setZValue(l->zValue()+1); } }因为那是我之前拥有的,但也是由于之前提到的原因而不起作用的解决方案之一。 -
你说你所有的组件都是独立的,那么它们都是顶级项吗?在这种情况下,
setZValue应该可以工作。 -
@Riateche 好吧,不完全是,我没有很好地表达 myselkf(抱歉)。我想说我的所有组件(rect 项)都是独立的,因此是顶级项。管脚是组件的子级,每个发出信号的管脚都是相关链接的父级(换句话说,链接的父级具有其起始管脚)。但是,链接及其结束引脚不共享父项。
-
如果您将所有项目设为顶级,z-ordering 将变得更加容易。你能做到吗?
标签: qt stack qgraphicsitem z-order siblings