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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top