Frage

habe ich eine Matrix von QGraphicsItem des in einem QGraphicsScene und wenn ich ein Element klicken, um es ändert sie die Farbe. Dies wird mit mousePressEvent() umgesetzt. Ich möchte klicken und halten zu können und dann die Cursor über andere QGraphicsItem die bewegen und ihre Farbe zu ändern, damit ihre mousePressEvent() auslösen.

Das Problem ist, dass aufgrund der Maus, um das erste Element packte ich auf „hält“ alle Ereignisse und hoverEnterEvent() nicht ausgelöst. Ich habe versucht, das Hinzufügen ungrabMouse() zu mousePressEvent() aber das hat nicht geholfen.

Ich denke, eine Lösung wäre, die die QGraphicsitem zu machen Drag-fähig und QT Drag und für die Funktionen fallen. In der Tat habe ich dieses:

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

, und wenn ich einen Text aus der Anwendung über die Elemente ziehe es funktioniert, wie ich es will, aber nicht, wenn ich „ziehen“ ein QGrahphicsItem.

So ist die einzige Lösung, die eine QGraphicsItem dragable zu machen, um Trigger-Ereignisse in die Lage sein, während mit einer klickten Maustaste über sie schweben?

War es hilfreich?

Lösung 2

fand ich eine Lösung selbst. Ich habe alle meine QGraphicsRectItem die zu einem QGraphicsItemGroup und implementiert, um die Ereignisse für diese Gruppe. In der Gruppe :: mousemove () prüfe ich die Position des Cursors und wenden Sie das Ereignis auf seine Kinder. Es sieht wie folgt aus:

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

Wenn Sie das gleiche Problem und benötigen weitere Informationen gerne an mich wenden.

Andere Tipps

Ich würde empfehlen, mouseMoveEvent() verwenden.

Edit:. Die mouseMoveEvent() des Mutter QGraphicsView

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top