Diagramm zeichnen und richtig skalieren zur Fenstergröße

Verschiedenes zu Qt
Antworten
qt2007
Beiträge: 14
Registriert: 3. November 2007 01:25

Diagramm zeichnen und richtig skalieren zur Fenstergröße

Beitrag von qt2007 »

Hallo zusammen,
ich möchte ein Liniendiagramm darstellen. Die Werte liegen als QVector<char> vor. Auf dem Bildschirm sollen jeweils immer 1024 Werte aus diesem Vector dargestellt werden unabhängig von der Größe des Fensters in Pixel. Später soll es noch weitere Zoom Stufen geben, so dass z.B. auch 4096 Werte oder mehr dargestellt werden können. Jetzt gibt es folgendes Problem (siehe Bilder). Hat das Fenster mehr Pixel als Werte die momentan gargestellt werden sollen, kommt es natürlich zu Lücken. Ich habe versucht mit painter.scale(width() / 1024.0, 1.0) die Breite auf 1024 Werte aufzuteilen und dann mit pen->setWidthF(width() / 1024.0) die Linien zu zeichnen. Das funktioniert aber auch nicht richtig und ist außerdem sehr sehr langsam. Nun meine Frage: gibt es vielleicht eine elegante Methode wie ich diese Lücken verhindern kann?
Dateianhänge
ohne_lücken.JPG
ohne_lücken.JPG (9.96 KiB) 3230 mal betrachtet
mit_lücken.JPG
mit_lücken.JPG (13.92 KiB) 3230 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Zeichne nicht jeden Punkt von 0 weg, sondern packe alle Punkte in ein Polygon.
qt2007
Beiträge: 14
Registriert: 3. November 2007 01:25

Beitrag von qt2007 »

Danke, funktioniert astrein!
Gruß
qt2007
Beiträge: 14
Registriert: 3. November 2007 01:25

Beitrag von qt2007 »

Wie ich schon erwähnt habe funktioniert es einwandfrei. Wenn aber zu sehr vergrößert wird geht der Liniencharakter verloren, die einzelnen Balken sind dann nicht mehr erkennbar. Jetzt habe ich folgende Lösung gefunden: wenn ich vor dem skalieren von QPainter einen Pen definiere mit Linienstärke 1, so wird diese Linienstärke dann später auch mitskaliert, genau so wie ich es gern haben würde. Einziges Problem ist die CPU Auslastung, man muss dazu sagen, dass das Diagramm 25 mal in der Sekunde per Timer geupdatet wird. Die Auslastung liegt mit dem skalierten Pen dann bei über 50%, ohne diesen bei max. 5%.
Gibt es vielleicht doch noch Alternativen, die den Liniencharakter erhalten oder muss ich damit leben?
qt2007
Beiträge: 14
Registriert: 3. November 2007 01:25

Beitrag von qt2007 »

Sorry es funktioniert auch mit der Polygonmethode wie oben beschrieben. Ich musste nur bei jeder Linie daneben auf gleicher Höhe noch einen Punkt setzen, dann bekommt man auch Balken und keine Spitzen. Das ich da nicht gleich graufgekommen bin... Nochmals Danke an upsala!
Gruß
Antworten