Pregunta

Tengo una matriz de QGraphicsItem de en un QGraphicsScene y al hacer clic en un elemento que cambia de color. Esto se implementa con mousePressEvent(). Quiero ser capaz de hacer clic y espera y luego mover el cursor sobre otra QGraphicsItem de y cambiar su color también, por lo tanto, desencadenar su mousePressEvent().

El problema es que debido al ratón agarrar el primer elemento hago clic en "mantiene" todos los eventos y hoverEnterEvent() no se activa. He intentado añadir a ungrabMouse() mousePressEvent() pero eso no ayuda.

Creo que una solución sería hacer del QGraphicsitem capaces de arrastrar y utilizar QT funciones de arrastrar y soltar para eso. De hecho tengo esto:

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

y cuando arrastro un poco de texto de la aplicación a través de los elementos funciona como yo quiero, pero no cuando "arrastrar" un QGrahphicsItem.

Así es la única solución para hacer una QGraphicsItem dragable ser capaz de eventos de disparo mientras se cierne sobre ellos con un botón hecho clic del ratón?

¿Fue útil?

Solución 2

He encontrado una solución a mí mismo. Añadí todo mi QGraphicsRectItem de un QGraphicsItemGroup e implementé los eventos de este grupo. En el Grupo :: MouseMoveEvent () puedo comprobar la posición del cursor y aplicar el evento para sus hijos. Se ve así:

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

Si tiene el mismo problema y necesita más información no dude en contactar conmigo.

Otros consejos

Me gustaría recomendar el uso mouseMoveEvent().

Editar:. El mouseMoveEvent() del QGraphicsView padres

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top