Одно нажатие мыши для нескольких QGraphicsItem в QT - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть матрица QGraphicsItem в QGraphicsScene, и когда я щелкаю элемент, он меняет его цвет.Это реализовано с mousePressEvent().Я хочу иметь возможность щелкать и удерживать, а затем навести курсор на другие объекты QGraphicsItem и изменить их цвет, следовательно, вызвать их mousePressEvent().

Проблема в том, что из-за мыши, схватившей первый элемент, я нажимаю "сохраняет все события и hoverEnterEvent() не срабатывает.Я попытался добавить ungrabMouse() к mousePressEvent(), но это не помогло.

Я думаю, что одним из решений было бы сделать QGraphicsitem способным к перетаскиванию и использовать для этого функции перетаскивания QT.На самом деле у меня есть это:

void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    changeColor();
}

, и когда я перетаскиваю некоторый текст из приложения поверх элементов, он работает так, как я хочу, но не когда я «перетаскиваю» QGrahphicsItem.

такое единственное решение, позволяющее сделать QGraphicsItem перетаскиваемым, чтобы иметь возможность вызывать события при наведении на них мыши с нажатой кнопкой мыши?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Я нашел решение сам. Я добавил все свои QGraphicsRectItem в QGraphicsItemGroup и реализовал события для этой группы. В Group :: MouseMoveEvent () я проверяю положение курсора и применяю событие к его дочерним элементам. Это выглядит так:

void Group::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
    if (boundingRect().adjusted(0,0,-1,-1).contains(event->pos()))
    {
        if (CellCoordinate(event->pos()) != lastChangedCell_) {
            lastChangedCell_ = CellCoordinate(event->pos());
            modifyCell(CellCoordinate(event->pos()));
        }
    }
}

Если у вас возникла та же проблема и вам нужна дополнительная информация, не стесняйтесь связаться со мной.

1 голос
/ 17 ноября 2010

Я бы порекомендовал использовать mouseMoveEvent().

Редактировать: mouseMoveEvent() родительского QGraphicsView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...