QwtPlotSpectrogram* m_spectrogram;
QwtMatrixRasterData* m_rawdata;
QwtScaleWidget* m_rightAxis;
LinearColorMapRGB* m_colorMap;
class LinearColorMapRGB : public QwtLinearColorMap
{
public:
LinearColorMapRGB() :
QwtLinearColorMap(Qt::darkCyan, Qt::red, QwtColorMap::RGB)
{
addColorStop(0.1, Qt::cyan);
addColorStop(0.6, Qt::green);
addColorStop(0.95, Qt::yellow);
}
};
void MainWindow::InitPlotGram( QwtPlot* Plot)
{
//设置线程数和缓存,影响不大
if(m_spectrogram==NULL)
{
m_spectrogram = new QwtPlotSpectrogram();
m_spectrogram->setRenderThreadCount(0);
m_spectrogram->setCachePolicy(QwtPlotRasterItem::PaintCache);
m_spectrogram->attach(ui->qwtPlot_Wave4);
}
//设置右边颜色柱
if(m_rightAxis==NULL)
{
m_rightAxis = Plot->axisWidget( QwtPlot::yRight );
m_rightAxis->setColorBarEnabled( true );
m_rightAxis->setColorBarWidth( 20 );
//m_rightAxis->setTitle("幅值");
}
//m_rightAxis->setColorMap(QwtInterval( 0, 22 ), new LinearColorMapRGB());
//设置坐标轴的名称
Plot->setTitle("RD");
Plot->setAxisTitle(QwtPlot::xBottom, "距离(m)");
Plot->setAxisTitle(QwtPlot::yLeft, "多普勒(Hz)");
//设置坐标轴的范围
// ui->qwtPlot_Wave2->setAxisScale(QwtPlot::yLeft, 0, 9690);//x坐标最大值
// ui->qwtPlot_Wave2->setAxisScale(QwtPlot::xBottom, 0, 500);//y坐标最大值
// ui->qwtPlot_Wave2->setAxisScale(QwtPlot::yRight, 0, 22);//z坐标最大值
Plot->enableAxis(QwtPlot::yRight);
//设置画布对齐到所有坐标轴
Plot->plotLayout()->setAlignCanvasToScales(true);
if(m_rawdata==NULL)
{
m_rawdata = new QwtMatrixRasterData;
m_rawdata->setResampleMode(QwtMatrixRasterData::BilinearInterpolation);
}
m_colorMap = new LinearColorMapRGB();
// m_rawdata->setInterval( Qt::XAxis, QwtInterval( 0, 500) );
// m_rawdata->setInterval( Qt::YAxis, QwtInterval( 0, 9690 ) );
// m_rawdata->setInterval( Qt::ZAxis, QwtInterval( 0, 22 ) );
}
void MainWindow::HandleMtalabSDataContent(QVector<double> waveData,quint16 cloumn,quint32 maxZ,quint16 x)
{
//int nPos = 1/m_globePRT.toUInt()*1000;
//qDebug()<<"HandleMtalabSDataContent"<<m_globePRF.toUInt()/2;
//double yRange = (double)m_globePRF.toUInt()/2;
double yRange = 10;
ui->qwtPlot_Wave6->setAxisScale(QwtPlot::yLeft, -yRange, yRange);//x坐标最大值
ui->qwtPlot_Wave6->setAxisScale(QwtPlot::xBottom, 0, cloumn);//y坐标最大值
ui->qwtPlot_Wave6->setAxisScale(QwtPlot::yRight, 0, maxZ);//z坐标最大值
ui->qwtPlot_Wave6->plotLayout()->setAlignCanvasToScales(true);
m_rightAxis2->setColorMap(QwtInterval( 0, maxZ ),m_colorMap);
m_rawdata2->setResampleMode(QwtMatrixRasterData::NearestNeighbour);//插值方法
// m_rawdata->setInterval( Qt::XAxis, QwtInterval( 0, m_globeCPN*0.1) );
// m_rawdata->setInterval( Qt::YAxis, QwtInterval( 0, m_globeN*0.1 ) );
// m_rawdata->setInterval( Qt::ZAxis, QwtInterval( 0, m_globalMaxZ ) );
m_rawdata2->setInterval( Qt::XAxis, QwtInterval( 0, cloumn) );
m_rawdata2->setInterval( Qt::YAxis, QwtInterval( -yRange, yRange ) );
m_rawdata2->setInterval( Qt::ZAxis, QwtInterval( 0, maxZ ) );
//设置轮廓线的数量和层次(当值为多少时画一条轮廓线)
QList<double> contourLevels;
for(int i = 0; i <= maxZ; i = i + 1)
{
contourLevels.append(i);
}
//qDebug()<<"m_globalMaxZ"<<m_globalMaxZ<<m_globeCPN*0.1<<m_globeN*0.1;
m_spectrogram2->setContourLevels( contourLevels );
m_rawdata2->setValueMatrix(waveData, cloumn );
m_spectrogram2->setData(m_rawdata2);
m_spectrogram2->setDisplayMode(QwtPlotSpectrogram::ContourMode, true);
m_spectrogram2->setDisplayMode( QwtPlotSpectrogram::DisplayMode::ImageMode, true );
m_spectrogram2->setDefaultContourPen(Qt::transparent, 1);
m_spectrogram2->setColorMap(m_colorMap2/*new LinearColorMapRGB()*/);
ui->qwtPlot_Wave6->replot();
//qDebug()<<"HandleMtalabTDataContent";
}