Wie kann ich QPainterPath-Unterpfade anders färben?

8

Wie der Titel andeutet, suche ich nach einer Möglichkeit, die Unterpfade eines QPainterPath mit verschiedenen Farben zu färben, die auf ein QGraphicsPathItem angewendet werden, ODER einfach die Farbe entlang des PathItems mit einem QGradient QPen zu ändern.

Letztendlich versuche ich, die richtige Lösung zu finden, die mir die Möglichkeit geben wird, eine einzige Linie sichtbar zu zeichnen, die die Farben anhand externer Variablen ändert.

Ich verwende eine QGraphicsScene, um alles zu zeichnen.

Bei meiner aktuellen Lösung erstelle ich mehrere QGraphicsPathItems, die jeweils mit ihren jeweiligen QPens unterschiedlich gefärbt sind. Wenn ich Daten erhalte, befülle ich den PainterPath, der diesen PathItems zugeordnet ist. Dies gibt mir die mehrfarbigen Linien, die ich brauche, aber die Linien sind sichtbar getrennt.

Ich muss in der Lage sein, Unterpfade von QPainterPath während der Farbänderung unsichtbar zu machen, oder den Gradienten ändern, der auf ein einzelnes PathItem angewendet wird. Oder vielleicht gibt es einen anderen Ansatz, den ich vermisse. Jede Hilfe wäre wunderbar.

-Bearbeiten:

So mache ich gerade die Zeichnung, wie in der Lösung meiner Frage erwähnt. Beachten Sie erneut, dass ich ein GraphicsScene verwende.

Peilungsformelberechnungen in GraphicsScene, die zu unregelmäßigen Ergebnissen führen

Hier ist, was ich versuche zu tun.

Wie Sie sehen können, ändert die Linie die Farbe, wie sie gezeichnet wird, durch externe Variablen. Ich fürchte, ein Qgradient funktioniert möglicherweise nicht, weil die Linie nicht immer gerade ist; Die Farbe muss entlang der Linie fließen.

Hier ist was passiert:

Wie Sie sehen können, springt die rote Linie (PathItem) von dort, wo sie zuletzt sichtbar war, an die neue Position.

Stellen Sie sich vor, dass diese Linie im Laufe der Zeit gezeichnet wird, um das Verhalten besser zu verdeutlichen. Es beginnt rot, bald wird eine Variable gesetzt und die Farbe der gezeichneten Liniensegmente ändert sich in orange. Die roten Teile der Linie bleiben intakt, so dass wir historisch sehen können, was der Zustand der Variablen zu dieser Zeit war. Zu verschiedenen Zeiten passt sich die Variable an und die Farbe, die auf neue Teile der Zeile angewendet wird, wird entsprechend aktualisiert.

Wenn die Linie fertig gezeichnet ist, können wir sie betrachten und sehen, wann sich die Farben geändert haben.

Ich hoffe, das macht alles Sinn.

    
bauervision 01.11.2017, 18:46
quelle

1 Antwort

5

Sie können mehrere QPainterPath verwenden, einen für jede Farbe. Und dann male sie alle mit der richtigen Farbe. Stellen Sie sicher, dass moveTo() den aktuellen Pfadcursor ersetzt, ohne eine Linie zu zeichnen.

%Vor%

Wenn die Aufrufe von "moveTo" und "lineTo" etwas schwerwiegend sind, können Sie alle QPainterPaths in Ihrer eigenen Klasse mit einer lineTo(QPointF, QColor) -Funktion kapseln, die den Pfadwechsel beim Ändern der Farbe übernimmt.

    
Benjamin T 07.11.2017, 11:43
quelle

Tags und Links