C++ qm插入顺序

C++ qm插入顺序,c++,qt,qt4,qgraphicsitem,C++,Qt,Qt4,Qgraphicsitem,我有一个项目,使用QGraphicscene+QGraphicsView进行QGraphicsSitem组织。 所有图形项目均可移动和选择 问题是:当我在场景中插入新的QGraphicsItem并且这个项目比上一个项目大时,我不能用鼠标选择它 从Qt文档: 默认情况下,所有同级项都按插入顺序堆叠(即,添加的第一项>在添加的下一项之前绘制)。如果两个项目的Z值不同,则在顶部绘制Z值最高的项目>。当Z值相同时,插入>顺序将决定堆叠顺序 问题,如何更改图形项的插入顺序 我尝试将mousePressEv

我有一个项目,使用QGraphicscene+QGraphicsView进行QGraphicsSitem组织。 所有图形项目均可移动和选择

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

从Qt文档:

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

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

我尝试将mousePressEvent子类化为QGraphicsView,并使用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 );
}
void视图::MousePresseEvent(QMouseEvent*事件)
{
MyGraphicsGroup*last=0;
QGraphicsItem*first=0;
foreach(QGraphicsItem*项目,项目(事件->位置())
{
如果(!first)first=项目;
if(item->flags()&QGraphicsItem::ItemIsSelectable)
{
最后=qgraphicsitem_铸件(项目);
}
}
如果(最后)
{
第一->堆叠之前(最后);
}
继承::mousePressEvent(事件);
}
刚在文档中找到:

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


希望有帮助。

是的,我可以使用item->setZValue(++I),但我在QGraphicsItem上有附加的QGraphicsWidget控件,ZValue=2,因此我需要为具有ZValue的项和小部件提供附加的复杂逻辑。我有与您完全相同的问题,我还想保留ZValue功能以用于不同的目的。