【发布时间】:2011-09-05 04:48:31
【问题描述】:
我有使用 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 );
}
【问题讨论】:
标签: c++ qt qt4 qgraphicsitem