Одна мышь для нескольких QGraphicsitem в Qt
-
25-09-2019 - |
Вопрос
У меня есть матрица QGraphicsItem's в QGraphicsScene, и когда я нажимаю элемент, который он меняет, это цвет. Это реализовано с mousePressEvent()
. Отказ Я хочу быть в состоянии щелкнуть и удерживать, а затем переместить курсор на другие QGraphicsItem и изменить их цвет, отсюда инициируйте их mousePressEvent()
.
Проблема в том, что из-за того, что мышь, схватив первый элемент, я нажимаю «Сохраняет» все события и hoverEnterEvent()
не срабатывает. Я пытался добавить ungrabMouse()
к mousePressEvent()
Но это не помогло.
Я думаю, что одно решение будет заключаться в том, чтобы сделать перетаскивание QGraphicsItem и использовать функции переменного сопротивления для этого. На самом деле у меня есть это:
void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
changeColor();
}
И когда я перетащил текст из приложения по элементам, он работает так, как будто я хочу, но не когда я «перетащил» qgrahphicsitem.
Итак, это единственное решение для создания QGraphicsItem перетаскиваемого, чтобы иметь возможность запускать события, одновременно зависая над ними нажатой кнопке мыши?
Решение 2
Я нашел решение сам. Я добавил все мои QGraphicsrectItem's на QGraphicsiteMgroup и внедрил события для этой группы. В Группе :: 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()));
}
}
}
Если у вас есть та же проблема и нужна дополнительная информация, не стесняйтесь связаться со мной.
Другие советы
Я бы порекомендовал использовать mouseMoveEvent()
.
Редактировать: то mouseMoveEvent()
родителя QGraphicsView
.