Использование 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);

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