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?
Diagramm zeichnen und richtig skalieren zur Fenstergröße
Diagramm zeichnen und richtig skalieren zur Fenstergröße
- Dateianhänge
-
- ohne_lücken.JPG (9.96 KiB) 3227 mal betrachtet
-
- mit_lücken.JPG (13.92 KiB) 3227 mal betrachtet
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?
Gibt es vielleicht doch noch Alternativen, die den Liniencharakter erhalten oder muss ich damit leben?