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.
Kann ich 'QImage' anstelle von' QPixmap' verwenden? –
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