Schichten auf QGraphicsView?
Hallo, ich mache eine Anwendung, zieht Daten aus einem WFS und dann zeigt die Ebenen der Daten auf einem QGraphicsView
auf ein widget. Im moment werden alle Ebenen gerendert werden und Hinzugefügt, um die gleiche Ansicht, das heißt, wenn ich schalten wollen, eine Schicht der es heißt re-rendering-alles, außer dass Schicht.
Im moment im hinzufügen eines QGraphicsScene
mit Ellipse Artikel-und Polygon-Elemente Hinzugefügt, um die Grafik-Szene. Ich Frage mich, ob es möglich, fügen Sie mehrere Bilder zu einer Grafik anzuzeigen oder zu Schichten, um eine Szene oder etwas, das mir erlauben würde, nur ein - /ausblenden bestimmter Punkte/Polygone, die aus einer check-box oder etwas, das einfach blendet eine Ebene?
Ich weiß, das ist ziemlich vage, aber ich würde schätzen jede Hilfe.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen anderen Weg zu gehen, ist
QGraphicsItemGroup
Etwas wie:
So können Sie behandeln eine Gruppe als eine Schicht, und da die Gruppe auch
QGraphicsItem
alle Funktionen wie show()/hide() etc.UPDATE: Ändern von Z-val für eine Gruppe zu erlauben, Sie zu implementieren, Dinge wie "move layer to top/bottom'
group->show
undgroup->hide
zum ein - /ausblenden der Polygone/Punkte, die von der Grafik-Ansicht funktioniert gut und nicht unnötig viel codeBrauchen Sie nur ein
QGraphicsScene
, aber der Schlüssel ist hier, dass alleQGraphicsItem
s undQGraphicsObject
s kann übergeordnet werden.Wenn Sie erstellen eine einzige
QGraphicsItem
oderQGraphicsObject
als parent-Objekt, Sie braucht nicht, etwas zu zeichnen, aber kann verwendet werden, als die Wurzel für eine Ebene Elemente.Daher Unterklasse von
QGraphicsItem
zu erstellenQGraphicsItemLayer
Klasse, die nicht etwas Rendern, und fügen Sie alle Ellipsen, Polygone etc, die erforderlich sind, in derselben Ebene wie die Kinder, dieQGraphicsItemLayer
.Wenn Sie möchten, um eine Ebene auszublenden, nur verstecken die Eltern
QGraphicsItemLayer
Objekt und alle seine untergeordneten Objekte ausgeblendet werden, auch.-------- Bearbeitet --------------
Erben von
QGraphicsItem
: -Erstellen Sie ein layer-Element:
Fügen Sie die gewünschten Objekte auf die Ebene, beachten Sie, dass die Spieler übergeben die Eltern
Vorausgesetzt, Sie haben
QGraphicsScene
mit einem Zeiger, um es alspScene
: -Dann, wenn Sie wollen, um die Ebene auszublenden
Oder Anzeige der Ebene: -
boundingRect()
undpaint()
.Ich denke, Sie könnten versuchen, Ihre partition Objekte nach z-Wert: siehe setZValue.
Stellen Sie dann ein mapping zwischen layer-id und die Indizierung. Eine einfache QStringList tun könnte.
Natürlich gibt es viele details und Variationen, die eine praktische Lösung berücksichtigen müssen.