我正在使用Qt來繪製這樣的光譜圖:在Qt中繪製陰謀的最佳方式是什麼?
我正在考慮QGraphicsView
班,但不確定其表現。據我所知,QGraphicsView
中的對象是單獨存儲的,繪製大量的點可能會影響性能。
我應該用什麼Qt類來實現這個目標?
我正在使用Qt來繪製這樣的光譜圖:在Qt中繪製陰謀的最佳方式是什麼?
我正在考慮QGraphicsView
班,但不確定其表現。據我所知,QGraphicsView
中的對象是單獨存儲的,繪製大量的點可能會影響性能。
我應該用什麼Qt類來實現這個目標?
絕對不要對每個點/標記使用QGraphicsItem
。好的方法是生成代表譜圖的QPixmap
,並將該像素圖作爲單個項目放入QGraphicsScene
(可使用QGraphicsPixmapItem
)。
要利用QPixmap
請使用QPainter
。也許一個小例子將是有益的:
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);
}
}
的getDataForCoordinates()
和getColorForData()
只是例子演示功能是如何工作的。你可能有不同的方式來獲取數據和顏色。
編輯
但是,如果你並不需要比更容易縮放/平移功能將只是直接在油漆QWidget
在QWidget::paintEvent()
和不使用QGraphicsView
/QGraphicScene
可言。
爲了這個目的,我建議你使用QCustomPlot或Qwt。 兩者都有非常好的文檔。
如果您選擇使用Qwt,請查看QwtPlotSpectrogram Class。
QCustomPlot是外部庫,如果您正在尋找QT原生的東西,然後看看QPainter class。
我可以使用'QImage'而不是'QPixmap'嗎? –
是的,你可以,但爲什麼? ...'QPixmap' *是爲在屏幕上顯示圖像而設計和優化的。* ...(來自Qt文檔) – Tomas