2016-05-04 30 views
3

私はこのようなスペクトログラムを描画するためにQtを使用しています:Qtでプロットを描く最も良い方法は何ですか?

spectrogram また、グラフの領域を選択して編集したり、スクロールしたりズームしたりできます。

私はQGraphicsViewクラスを検討していますが、その性能についてはわかりません。私が知っているとおり、QGraphicsViewのオブジェクトは個別に格納され、膨大な量のドットを描画するとパフォーマンスに影響する可能性があります。

これを達成するためにどのようなQtクラスを使用する必要がありますか?

答えて

1

間違いなくすべてのドット/マークにQGraphicsItemを使用しないでください。良い方法は、スペクトログラムを表すQPixmapを生成し、このピックスマップをQGraphicsSceneに1つの項目として配置することです(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()はそれが仕事ができる方法を示す一例に過ぎ関数です。おそらくデータとその色を取得する方法が異なるでしょう。

EDIT

しかし、あなただけのQWidget::paintEvent()QWidgetに直接ペイントすると、まったくQGraphicsView/QGraphicSceneを使用していないだろうでも簡単によりズーム/パン機能を必要としない場合。

+0

QPixmapの代わりに 'QImage'を使用できますか? –

+0

はい、できますが、なぜですか? ... QPixmap' *は、画面上に画像を表示するように設計されています。* ...(Qtドキュメントから) – Tomas

1

QCustomPlotまたはQwtのいずれかを使用することをお勧めします。 どちらも非常に良い文書を持っています。

Qwtを使用する場合は、QwtPlotSpectrogram Classをご覧ください。

0

QCustomPlotは外部ライブラリです。QTにネイティブなものをお探しの場合は、QPainter classをご覧ください。

関連する問題