2010-05-11 4 views
2

В моем приложении у меня есть два типа объекта. Один элемент поля, другой - составной элемент. Композитные элементы могут содержать два или более поля. Вот моя сложная реализация.Контекстное меню на QGraphicsWidget

Мой первый вопрос заключается в том, как я могу распространять событие контекстного меню на конкретный ребенок.

composite1 http://img169.imageshack.us/img169/9079/composite1.jpg

Изображение на выше демонстрирует один из моих возможных композитного элемента.

Если вы посмотрите на код выше, вы увидите, что я печатаю «Тест», когда происходит событие контекстного меню.

Когда я нажимаю правой кнопкой мыши на символ линии, я вижу, что печатается сообщение «Тест». Но когда я нажимаю правой кнопкой мыши на символ сигнала, «Тест» не печатается, и я хочу, чтобы он был напечатан.

Мой второй вопрос, из-за чего такое поведение. Как я могу это преодолеть.

+0

Я не могу найти ваш первый вопрос, о чем это было? – mosg

+0

@mosg Извините, что забыл написать свой первый вопрос. Я редактировал вопрос. – onurozcelik

ответ

0

Не могли бы вы попытаться переопределить ваш contextMenu с помощью события mouseRelease?

void CompositeItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
{ 
     if(event->button() == Qt::RightButton) 
     { 
      contextMenu->popup(QCursor::pos()); 
     } 
} 
+0

Из-за совета я отредактировал код boundingRect. Я предполагаю, что это - аккуратная идея объединить childs boundingRects. Но этот элемент времени не может захватывать события, такие как contextmenuevent и mousepressevent. Поэтому моя предыдущая проблема - поймать события. У вас есть идея, что может вызвать это? – onurozcelik

0

Я выяснил, что могут быть два решения для ловли событий. Первый - это переопределение функции shape. В моем случае это будет реализовано так.

QPainterPath shape() const 
{ 
    QPainterPath path; 
    path.addRect(boundingRect()); 
    return path; 
} 

Второй заключается в использовании QGraphicsItemGroup
Это будет хорошей идеей использовать QGraphicsItemGroup если вы diretly добавляя свои элементы в сцене. Но в моем случае я должен подкласса QGraphicsItemGroup из-за того, что использую макет. Так что временно я пишу свой собственный предмет.

Смежные вопросы