【问题标题】:QGraphicsItem inserting orderQGraphicsItem 插入顺序
【发布时间】: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


    【解决方案1】:

    刚刚在文档中找到:

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

    希望对你有帮助。

    【讨论】:

    • 是的,我可以使用 item->setZValue(++i),但我在 QGraphicsItem 之上有额外的 QGraphicsWidget 控件,ZValue = 2,所以我需要额外的复杂逻辑来处理带有 ZValue 的项目和小部件。
    • 我遇到了和你一样的问题,我也想保留 zValue 功能用于不同的目的。
    猜你喜欢
    • 2015-09-17
    • 2020-01-13
    • 1970-01-01
    • 2021-10-10
    • 2012-01-18
    • 2018-05-31
    • 2018-10-10
    • 2018-12-02
    相关资源
    最近更新 更多