Вопрос

У меня есть матрица 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top