Порядок вставки QGraphicsItem - PullRequest
3 голосов
/ 31 мая 2011

У меня есть проект, который использует QGraphicsScene + QGraphicsView для организации QGraphicsItem. Все графические элементы являются подвижными и выбираемыми.

Проблема в том, что когда я вставляю новый 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 );
}

1 Ответ

2 голосов
/ 31 мая 2011

только что найдено в документации:

"Вы можете установить порядок размещения элементов, вызвав setZValue ()"

Надеюсь, это поможет.

...