Q图形项目插入顺序



我有一个使用QGraphicsScene+QGraphicsView进行QGraphicsItem组织的项目。所有图形项目都可以移动和选择。

问题是:当我在场景中插入新的QGraphicsItem,并且这个项目比上一个项目大时,我无法用鼠标选择它。

来自Qt文档:

默认情况下,所有同级项目都按插入顺序堆叠(即,添加的第一个项目>绘制在添加的下一个项目之前)。如果两个项目的Z值不同,则在顶部绘制具有最高Z值的项目>。当Z值相同时,插入>顺序将决定堆叠顺序。

问题,如何更改图形项目的插入顺序?

我尝试为QGraphicsView创建mousePressEvent子类,并使用stackBefore()方法帮助更改插入顺序。如果所有项目混合在一起并相互重叠,则需要进行大量单击以选择所需项目。

void View::mousePressEvent ( QMouseEvent * event )
{
MyGraphicsGroup *last = 0;
QGraphicsItem *first = 0;
foreach( QGraphicsItem *item, items(event->pos()) )
{
    if( !first ) first = item;
    if( item->flags() & QGraphicsItem::ItemIsSelectable )
    {
        last = qgraphicsitem_cast<MyGraphicsGroup*>(item);
    }
}
if( last )
{
    first->stackBefore(last);
}
inherited::mousePressEvent( event );
}

刚刚在docu:中找到

"您可以设置项目的堆叠顺序通过调用setZValue()"

希望能有所帮助。

最新更新