Una stampa del mouse per diversi QGraphicsItem di in QT
-
25-09-2019 - |
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?
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