Использование QwtPlotSpectroCurve

Используя QwtPlotSpectroCurve (сначала ознакомтесь с QwtPlotCurve здесь) вы можете отображать информацию, требующую представление в трех измерениях; строить псевдо 3D - графики на двумерной плоскости. 3 измерение будет передано градацией цвета - такие графики называют спектрограммами. В отличии от компонента QwtPlotSpectrogram, вы управляете каждой точки кривой, а не интервалами. Компонент QwtPlotSpectroCurve менее функционален, но более логичен для потроение графиков.

Рассмотрим простенький пример. Построем круг, третее измерение зависит от радиуса - в центре воронка, по краям выше пропорционально радиусу.

#include <qwt_plot.h>
#include <qwt_plot_spectrocurve.h>
#include <QVector>
#include <qwt_point_3d.h>
#include <qwt_color_map.h>
....

double pi = 3.14; double dr = 0.025; double d_angl = 0.0025; double r_max = 5;

//Создаем екземпляр вектора и кривой QVector<QwtPoint3D> *vector = new QVector<QwtPoint3D>; QwtPlotSpectroCurve *curve = new QwtPlotSpectroCurve;

//Карта цветов необходима, чтобы задать цвета максимального //и минимального значений, там же можно управлять и //дополнительными настройками. ColorMap - наследник //QwtLinearColorMap. Экземпляр последнего не можно просто //так создать - он абстрактный. Описание ColorMap - ниже ColorMap *colormap = new ColorMap;

//Подключаем криву к плоту curve->attach(ui->qwtPlot);

//Задаем карту цветов для кривой curve->setColorMap(colormap);

//Указываем, какие именно значения у нас минимальное и максимальное curve->setColorRange(QwtInterval(0, r_max));

//Используем два цикла для обхода. Внешний - проходит по //радиусам, таким образом рисуем кольца с увеличиваючимся //на dr радиусом. Внутренний прходит по кольцу //(за принципом полярной системы координат). for(double r = dr; r < r_max; r += dr) { for(double angl = 0; angl < 2*pi; angl += d_angl) { vector->append(QwtPoint3D(r*sin(angl), r*cos(angl), r)); } }

//Подключаем точки к кривой curve->setSamples(*vector);

//Перерисовка плота для отображения изменений ui->qwtPlot->replot();

И обещанный ColorMap:
#include<qwt_color_map.h>

//Посколько QwtLinearColorMap - абстрактный, мы не можем //создавать его экземпляры, сначала надо описать наследника. //Используем минимум настроек - ограничимся цветами - для // наименьшего и наибольшего значения

class ColorMap: public QwtLinearColorMap { public: ColorMap(): QwtLinearColorMap(Qt::darkBlue, Qt::darkRed) { } };

Если вы хотите использовать более двух цветов, достаточно дописать в конструкторе
addColorStop(double range, QColor color);
Здесь range - относительная позиция, после какой цвет не действует (интервал 0..1). Например,
addColorStop(0.3,Qt::green);
spcurve

Скачать готовый пример: qwtspectro

Пример написан под Linux, поэтому в случае использования windows (или другого дистрибутива Linux) придется поправить *pro файл - указать местонахождение библиотеки qwt.