2016-05-04 7 views
3

Ich verwende Qt, um ein Spektrogramm wie folgt zu zeichnen:Was ist der beste Weg, um Plots in Qt zu zeichnen?

spectrogram. Ich möchte auch Bereiche des Diagramms auswählen und bearbeiten sowie scrollen und zoomen können.

Ich denke QGraphicsView Klasse, aber nicht sicher über seine Leistung. Wie ich weiß, werden die Objekte in QGraphicsView einzeln gespeichert und das Zeichnen einer großen Anzahl von Punkten kann die Leistung beeinträchtigen.

Welche Qt Klassen sollte ich verwenden, um dies zu erreichen?

Antwort

1

Verwenden Sie auf keinen Fall die QGraphicsItem für jeden Punkt/Marke. Guter Ansatz wäre, ein QPixmap zu erzeugen, das dein Spektrogramm darstellt und dann diese Pixmap in die QGraphicsScene als ein einzelnes Element einfügt (QGraphicsPixmapItem kann dafür verwendet werden).

Um auf die QPixmap zu zeichnen, verwenden Sie die QPainter. Vielleicht wird ein kleines Beispiel nützlich sein:

const int spectrWidth = 1000; 
const int spectrHeight = 500; 
QPixmap spectrPixmap(spectrWidth, spectrHeight); 
QPainter p(&spectrPixmap); 

for (int ir = 0; ir < spectrHeight; ir++) 
{ 
    for (int ic = 0; ic < spectrWidth; ic++) 
    { 
     double data = getDataForCoordinates(ic, ir); // your function 
     QColor color = getColorForData(data); // your function 
     p.setPen(color); 
     p.drawPoint(ic, ir); 
    } 
} 

Die getDataForCoordinates() und getColorForData() sind nur Beispielfunktionen demonstriert, wie es funktionieren könnte. Sie haben wahrscheinlich einen anderen Weg, um Daten und ihre Farbe zu erhalten.

EDIT

Aber wenn Sie nicht brauchen, eine Zoom/Pan-Funktionalität als auch einfacher, nur wäre direkt zu malen auf dem QWidget im QWidget::paintEvent() und nicht die QGraphicsView/QGraphicScene überhaupt verwendet wird.

+0

Kann ich 'QImage' anstelle von' QPixmap' verwenden? –

+0

Ja, Sie können, aber warum? ... 'QPixmap' * ist entworfen und optimiert für die Darstellung von Bildern auf dem Bildschirm. * ... (aus der Qt Dokumentation) – Tomas

1

Ich würde Ihnen empfehlen, entweder QCustomPlot oder Qwt für diesen Zweck zu verwenden. Beide haben eine sehr gute Dokumentation.

Wenn Sie mit Qwt arbeiten, werfen Sie einen Blick auf QwtPlotSpectrogram Class.

0

QCustomPlot ist eine externe Bibliothek. Wenn Sie etwas Eigenes von QT suchen, dann schauen Sie sich QPainter class an.

Verwandte Themen