3

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

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

来自 Qt 文档:

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

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

我尝试为 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 );
}
4

1 回答 1

2

刚刚在文档中找到:

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

希望能帮助到你。

于 2011-05-31T11:26:04.473 回答