Событие двойного щелчка QGraphicPixmapItem не переходит в родительский виджет при отправке QGraphicsTextItem

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

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

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

1 ответ

Решение

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

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

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

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;
}

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

Другие вопросы по тегам