Une pression de la souris pour plusieurs QGraphicsItem de QT
-
25-09-2019 - |
Question
J'ai une matrice de ce QGraphicsItem dans une QGraphicsScene et quand je clique sur un élément, il le change de couleur. Ceci est mis en œuvre avec mousePressEvent()
. Je veux être en mesure de cliquer et maintenez puis déplacez le curseur sur l'autre de QGraphicsItem et aussi changer leur couleur, donc déclencher leur mousePressEvent()
.
Le problème est qu'en raison de la souris saisir le premier élément que je clique sur « garde » tous les événements et hoverEnterEvent()
n'est pas déclenché. J'ai essayé d'ajouter à ungrabMouse()
mousePressEvent()
mais cela n'a pas aidé.
Je suppose qu'une solution serait de faire glisser la mesure du QGraphicsItem et utiliser les fonctions de glisser-déposer QT pour cela. En fait, j'ai ceci:
void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
changeColor();
}
et quand je fais glisser un texte de l'application des éléments qu'il fonctionne comme je le veux, mais pas quand je « glisser » un QGrahphicsItem.
est la seule solution pour faire une dragable de QGraphicsItem pour pouvoir déclencher des événements tout en planant au-dessus d'eux avec un bouton de la souris cliquée?
La solution 2
J'ai trouvé moi-même solution. J'ai ajouté mes QGraphicsRectItem à un de QGraphicsItemGroup et mis à exécution les événements de ce groupe. Dans le groupe :: mouseMoveEvent () Je vérifie la position du curseur et appliquer à ses enfants l'événement. Il ressemble à ceci:
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 vous avez le même problème et avez besoin de plus d'informations ne hésitez pas à me contacter.
Autres conseils
Je vous recommande d'utiliser mouseMoveEvent()
.
Edit:. Le mouseMoveEvent()
du QGraphicsView
mère