3

QGraphicsItem の整理に QGraphicsScene + QGraphicsView を使用するプロジェクトがあります。すべてのグラフィック アイテムは移動および選択可能です。

問題は、シーンに新しい QGraphicsItem を挿入し、このアイテムが前のアイテムよりも大きい場合、マウスで選択できないことです。

Qtのドキュメントから:

デフォルトでは、すべての兄弟アイテムは挿入順に積み上げられます (つまり、追加した最初のアイテムは、次に追加するアイテムの前に描画されます)。2 つのアイテムの 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 );
}
4

1 に答える 1

2

ドキュメントで見つけたばかりです:

「setZValue()を呼び出すことでアイテムの重ね順を設定できます」

それが役に立てば幸い。

于 2011-05-31T11:26:04.473 に答える