#include "lfrspectrogram.h" class SpectrogramData: public QwtRasterData { public: SpectrogramData(): QwtRasterData(QwtDoubleRect(-1.5, -1.5, 3.0, 3.0)) { } virtual QwtRasterData *copy() const { return new SpectrogramData(); } virtual QwtDoubleInterval range() const { return QwtDoubleInterval(0.0, 10.0); } virtual double value(double x, double y) const { const double c = 0.842; const double v1 = x * x + (y-c) * (y+c); const double v2 = x * (y+c) + x * (y+c); return 1.0 / (v1 * v1 + v2 * v2); } }; LFRSpectrogram::LFRSpectrogram(QWidget *parent) : QWidget(parent) { mainLayout = new QVBoxLayout(); plot_spectrogram = new QwtPlot(); spectrogram = new QwtPlotSpectrogram(tr("spectrogram")); QwtLinearColorMap colorMap(Qt::darkCyan, Qt::red); colorMap.addColorStop(0.1, Qt::cyan); colorMap.addColorStop(0.6, Qt::green); colorMap.addColorStop(0.95, Qt::yellow); spectrogram->setColorMap(colorMap); spectrogram->setData( SpectrogramData() ); spectrogram->attach(plot_spectrogram); // A color bar on the right axis QwtScaleWidget *rightAxis = plot_spectrogram->axisWidget(QwtPlot::yRight); rightAxis->setTitle("Intensity"); rightAxis->setColorBarEnabled(true); rightAxis->setColorMap(spectrogram->data().range(), spectrogram->colorMap()); plot_spectrogram->setAxisScale(QwtPlot::yRight, spectrogram->data().range().minValue(), spectrogram->data().range().maxValue() ); plot_spectrogram->enableAxis(QwtPlot::yRight); plot_spectrogram->plotLayout()->setAlignCanvasToScales(true); plot_spectrogram->replot(); mainLayout->addWidget(plot_spectrogram); this->setLayout(mainLayout); }