1

У меня есть главный виджет в Qt, и этот виджет содержит QGraphicsView и внутри него QGraphicsScene. В сцене добавьте QGraphicsPixmapItem s и QGraphicsTextItem s. В главном виджете я обрабатывать QWidget::mouseDoubleClickEvent (QMouseEvent * event) мои пункты все установленные флаги с:QGraphicPixmapItem событие с двойным щелчком не переходит к родительскому виджету, а QGraphicsTextItem отправляет

mItem->setFlag (QGraphicsItem::ItemIsMovable); 
mItem->setFlag (QGraphicsItem::ItemIsSelectable); 
mItem->setFlag (QGraphicsItem::ItemIsFocusable); 

Потому что я хочу, чтобы переместить элементы в сцене и выбрать их, а также я хочу, когда двойной щелчок происходит главный виджет обрабатывает это. Когда я дважды нажимаю на QGraphicsTextItem, он вводит mouseDoubleClickEvent в главном виджетах, однако, когда я дважды нажимаю на пункт QGraphicsPixmap, он поглощает двойной клик и не отправляет его на главный виджет. Также, когда флаг ItemIsFocusable не установлен, QGraphicsTextItem также поглощает событие двойного щелчка. Почему это происходит?
Я не хотел реализовывать подкласс QGraphicsItem s и хотел использовать уже определенные методы. Вот картина того, что я делаю:

enter image description here

+0

Текстовое описание того, что, по вашему мнению, делает ваш код, может отличаться от того, что он на самом деле делает. Я предлагаю опубликовать пример вашего кода, чтобы улучшить вопрос. – TheDarkKnight

+0

Что вы ожидаете от 'QGraphicsPixmapItem' для двойного щелчка? Элементы выполняют свою реализацию по умолчанию: если вы не подклассифицируете их и не выполните свою собственную реализацию. – Thalia

ответ

1

Я нашел решение для этого, потому что мой QGraphicsPixmapItem и QGraphicsTextItem ведет себя по-разному на двойной щелчок: QGraphicsTextItem посылает двойное событие щелчка к родителю, пока QGraphicsPixmapItem не я закомментировал ItemIsFocusable свойство:

mItem->setFlag (QGraphicsItem::ItemIsMovable); 
mItem->setFlag (QGraphicsItem::ItemIsSelectable); 
//mItem->setFlag (QGraphicsItem::ItemIsFocusable); 

Потому что даже если ItemIsFocusable является QGraphicsItem свойство, оно не ведет себя так же в разных QGraphicsItem унаследованных классов, поэтому для обработки двойного щелчка Я установил фильтр событий на QGraphicsScene, который содержит QGraphicsItem s в главном виджетах.

this->ui.graphicsViewMainScreen->scene ()->installEventFilter (this); 

И как реализация фильтра событий:

bool MyMainWidget::eventFilter (QObject *target , QEvent *event) 
{ 
    if (target == this->ui.graphicsViewMainScreen->scene ()) 
    { 
     if (event->type () == QEvent::GraphicsSceneMouseDoubleClick) 
     { 
      QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent *>(event); 
     } 
    } 
    return false; 
} 

Теперь я могу обнаружить двойные щелчки на QGraphicsItem с на сцене моего главного виджета.

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

  • Нет связанных вопросов^_^