#c #qt #qt4 #qgraphicsitem
#c #qt #qt4 #qgraphicsitem
Вопрос:
У меня есть проект, который использует QGraphicScene 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() amp; QGraphicsItem::ItemIsSelectable )
{
last = qgraphicsitem_cast<MyGraphicsGroup*>(item);
}
}
if( last )
{
first->stackBefore(last);
}
inherited::mousePressEvent( event );
}
Ответ №1:
только что найдено в документе:
«Порядок размещения элементов можно задать, вызвав setZValue()»
Надеюсь, это поможет.
Комментарии:
1. Да, я могу использовать item-> setZValue( i), но у меня есть дополнительный элемент управления QGraphicsWidget поверх QGraphicsItem с ZValue = 2, поэтому мне нужна дополнительная сложная логика для элементов и виджетов с ZValue.
2. У меня точно такая же проблема, как и у вас, и я также хочу зарезервировать функциональность zValue для другой цели.