Seite 1 von 1

Rubberband auf QGraphicsView benutzen

Verfasst: 15. September 2010 13:57
von metz153
Hallo,

ich habe ein QgraphicsView und würde gerne ein Rubberband benutzen.
Zum besseren Verständnis zeige ich hier mal eine Kette, wie bei mir ein Window aufgebaut ist:

Code: Alles auswählen

QMdiSubWindow->QWidget->QGraphicsView->QGraphicsScene->QGraphicsItems
Wobei hier der Pfeil ein "beinhaltet" bedeutet. Zum Beispiel beinhaltet eine Scene beliebig viele Items, wobei die Klasse QGraphicItems abgeleitet wurde und die entsprechenden Funtionen wie zum Beispiel paint() wurden überschrieben.
In der von QGraphicsView abgeleiteten Klasse wurden MousePressEvent und MouseDoubleClickEvent überschrieben um Items selektieren zu können und um neue Picture/Scenes öffnen zu können.
Dies Funktioniert auch ohne probleme.

Nun wollte ich die Items auch über ein Rubberband selektieren und dachte einfach die zwei folgenden settings machen, und das geht:

Code: Alles auswählen

setRubberbandSelectionMode(Qt::ContainsItemShape)
setDragMode(QGraphicsView::RubberBandDrag)
Aber leider ist dies nicht der Fall.
Und aus dem Example "40000 Chips" werde ich auch nicht schlau, denn da wird auch nur "setDragMode(QGraphicsView::RubberBandDrag)" gemacht und das Rubberband scheint automatisch zu funktionieren.

Hat da jemand eine Idee?
Muss ich evtl. ne entsprechende Funktion überschreiben, die ich übersehen habe?
Sonst was?

Vielen Dank schon mal für die nützlichen Tips im Voraus.

Gruß
Metz153[/code]

Verfasst: 15. September 2010 14:46
von metz153
Kurz nachdem ich den Eintrag hier erstellt habe, bin ich auf nen anderen Beitag in diesem Forum gestoßen:
http://qtforum.de/forum/viewtopic.php?t ... rubberband
Hier steht ja quasi was ich machen muss.

Nun bin ich soweit, dass ich ein Rubberband ziehen kann.
Allerdings werden jetzt die entsprechenden Items darunter nicht selektiert...

Verfasst: 16. September 2010 11:12
von metz153
Hallo,

nochmal kurz zu diesem Thema.
Ich habe nun das Rubberband in der GraphicsView implementiert.
In den GraphicsItems (abgeleitete Klassen von QGraphicsItem) wurden shape() und boundingrect() überschrieben.
Nun wollte ich als Modus bei den selectedItems den benutzen, der sagt, dass das Item unter dem RubberBand liegt. Und hier genau wollte ich das shape haben, da das bounding rect sehr groß ist.
Dies habe ich dann in dem MouseReleaseEvent wie folgt gemacht:

Code: Alles auswählen

   QList<QGraphicsItem*> rubberItems = items(rect, Qt::ContainsItemShape);
Jedoch hat es für mich den anschein, als ob er immer die boundingRect benutzt anstatt des shape.
Hat da jemand eine Ahnung, was ich da noch falsch gemacht haben könnte?

Danke

Gruß
Metz153