Um mouse pressiona para vários qgraphicsItem no QT
-
25-09-2019 - |
Pergunta
Eu tenho uma matriz de qgraphicsItem em uma qgraphicsscene e, quando clico em um elemento, ele muda sua cor. Isso é implementado com mousePressEvent()
. Eu quero poder clicar e segurar e depois mover o cursor sobre outros qgraphicsItem e mudar sua cor também, acionando seus mousePressEvent()
.
O problema é que, devido ao mouse pegando o primeiro elemento que clico em "mantém" todos os eventos e hoverEnterEvent()
não é acionado. Eu tentei adicionar ungrabMouse()
para mousePressEvent()
Mas isso não ajudou.
Eu acho que uma solução seria tornar o QGraphicsItem de arrastar e usar funções de arrastar e soltar QT para isso. Na verdade, eu tenho isso:
void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
changeColor();
}
E quando eu arrasto algum texto do aplicativo sobre os elementos, ele funciona como eu quero, mas não quando "arrasto" um qgrahphicsItem.
Então, é a única solução para tornar um qgraphicsItem arrasável para poder acionar eventos enquanto pairava sobre eles com um botão de mouse clicado?
Solução 2
Eu mesmo encontrei uma solução. Adicionei todos os meus qgraphicsRectiTem a um QGraphicsItemGroup e implementei os eventos para este grupo. No grupo :: mousemoveEvent (), verifico a posição do cursor e aplico o evento aos seus filhos. Se parece com isso:
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 você tiver o mesmo problema e precisar de mais informações, sinta -se à vontade para entrar em contato comigo.
Outras dicas
Eu recomendo usar mouseMoveEvent()
.
Editar: o mouseMoveEvent()
do pai QGraphicsView
.