Domanda

Ho una matrice di QGraphicsItem di in un QGraphicsScene e quando scatto un elemento che cambia il suo colore. Questo viene implementato con mousePressEvent(). Voglio essere in grado di fare clic e tenere premuto e quindi spostare il cursore su altri QGraphicsItem e di cambiare il loro colore troppo, quindi innescare la loro mousePressEvent().

Il problema è che a causa del mouse afferrando il primo elemento faccio clic su "mantiene" tutti gli eventi e hoverEnterEvent() non viene attivato. Ho provato ad aggiungere ungrabMouse() a mousePressEvent(), ma che non ha aiutato.

Credo che una soluzione potrebbe essere quella di rendere il QGraphicsitem trascinamento in grado e utilizzare QT drag and drop funzioni per questo. In effetti ho questo:

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

e quando mi trascino un testo dall'applicazione sugli elementi che funziona come lo voglio, ma non quando "trascinare" un QGrahphicsItem.

Quindi, è l'unica soluzione per fare un QGraphicsItem dragable essere in grado di eventi scatenanti, mentre in bilico su di loro con un pulsante cliccato del mouse?

È stato utile?

Soluzione 2

Ho trovato una soluzione io stesso. Ho aggiunto tutto il mio QGraphicsRectItem di un QGraphicsItemGroup e implementato gli eventi per questo gruppo. Nel Gruppo :: MouseMoveEvent () a verificare la posizione del cursore e applico l'evento per i suoi figli. Ecco come si presenta:

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

Se avete lo stesso problema e bisogno di maggiori informazioni Non esitate a contattarmi.

Altri suggerimenti

Mi consiglia di utilizzare mouseMoveEvent().

Modifica:. La mouseMoveEvent() del QGraphicsView genitore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top