Drag and Drop eines QGraphicsItem in einer QGraphicsScene

Alles rund um die Programmierung mit Qt
Antworten
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Drag and Drop eines QGraphicsItem in einer QGraphicsScene

Beitrag von mathies »

Hallo,

ich möchte in meiner Scene ein QGraphicItem per drag and drop bewegen, benötige aber zusätzliche Funktionallität in den MouseEvent-Funktionen, die ich deswegen überschreiben mußte (wenn ich die Funktionen nicht überschreibe funktioniert es ohne Probleme...).

Ich habe es folgendermaßen probiert. Ausschnitt MyScene.cpp:

Code: Alles auswählen

// Wenn nen Item an der Position des klicks, dann dies als GrabberItem setzen
void MyScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent)
{
    mGrabberItem = itemAt( mouseEvent->buttonDownScenePos(Qt::LeftButton) );
}

// GrabberItem für Qt-Funktionalität zurückgeben
QGraphicsItem* MapScene::mouseGrabberItem()
{
    return mGrabberItem;
}
Ausschnitt MyScene.h:

Code: Alles auswählen

protected:
    QGraphicsItem*    mGrabberItem;
private:
    QGraphicsItem*    mouseGrabberItem();
Es tut sich damit aber reichlich wenig. Das mGrabberItem wird nicht beachtet obwohl ich es doch eindeutig setze.

Wo liegt da das Problem?

Danke schon mal.

Grüßle,
Matthias
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Du musst das mousePressEvent auch an die Basisklasse übergeben, sonst verwirfst Du es ja. Bist aber nicht der erste mit dem Problem hier.
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Hallo,

wie meinst Du das? MyScene ist von QGraphicsScene abgeleitet, also brauche ich doch da nix mehr übergeben.

Wenn ich was anderes in der MousePressEvent-Funktion mache funktioniert es doch (z.B. das markieren von Items etc.), wohin sollte ich da jetzt noch etwas übergeben? Wenn ich das richtig verstehe wird doch dann, wo auch immer das geschieht, das GrabberItem abgefragt und das habe ich doch gesetzt.

Grüßle,
Matthias
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

mathies hat geschrieben: MyScene ist von QGraphicsScene abgeleitet, also brauche ich doch da nix mehr übergeben.
Irrtum.

probiere mal folgendes:

Code: Alles auswählen

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent)
{
    mGrabberItem = itemAt( mouseEvent->buttonDownScenePos(Qt::LeftButton) );

    QGraphicsScene::mousePressEvent(mouseEvent);

}
 
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Danke, wie kommt da drauf? Ich dachte immer, dadurch, dass ich die andere Funktion überschreibe ist das gegessen :)

Grüßle,
Matthias
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wenn du in deiner abgeleiteten Klasse eine Methode überschreibst, ist die Funktionalität der Basisklasse erst mal futsch! Um das alte Verhalten deiner neuen Version nicht zu unterbinden, kannst du wie gezeigt die "Original-Version" der Basisklasse aufrufen.
Antworten