출처 : https://remocon33.tistory.com/194
#ifndef COLORMAP_H
#define COLORMAP_H
#include <QWidget>
class QwtScaleWidget;
class QHBoxLayout;
class colormap : public QWidget
{
public:
colormap();
~colormap();
void setRange(double absMin,double absMax,double curMin,double curMax);
private:
QwtScaleWidget* rightAxis;
QHBoxLayout* layout;
};
#endif // COLORMAP_H
----------------------------------------------------
이 코드에서 setRange는 컬러맵의 범위를 지정하는 함수입니다.
absMin은 절대 최소값,
absMax는 절대 최대값,
curMin은 현재 최소값,
curMax는 현재 최대값입니다.
예를 들면, 원래 컬래맵의 범위가 0부터 100인데, 지금 내가 30부터 60까지의 범위만 확대해서 보고싶다고 한다면,
absMin=0, absMax=100, curMin=30, curMax=60 을 입력하면 됩니다.
----------------------------------------------------
#include "colormap.h"
#include <qwt_color_map.h>
#include <qwt_plot_spectrogram.h>
#include <qwt_plot_layout.h>
#include <qwt_plot_magnifier.h>
#include <qwt_scale_widget.h>
#include <QHBoxLayout>
class ColorMap: public QwtLinearColorMap //컬러맵 색상지정
{
public:
ColorMap():
QwtLinearColorMap( Qt::darkBlue, Qt::darkRed )
{
addColorStop( 0.2, Qt::blue );
addColorStop( 0.4, Qt::cyan );
addColorStop( 0.6, Qt::yellow );
addColorStop( 0.8, Qt::red );
}
};
colormap::colormap()
{
QwtInterval zInterval;
zInterval.setInterval(0.0,100.0); //눈금위젯에 절대 범위 지정
rightAxis = new QwtScaleWidget(); //눈금 위젯
rightAxis->setColorBarEnabled( true );
rightAxis->setColorBarWidth( 40 );
rightAxis->setAlignment(QwtScaleDraw::RightScale);
rightAxis->setColorMap( zInterval, new ColorMap() );
QList<double> majorTicks;
for(int i=0;i<11;i++)
{
majorTicks.push_back(10.0*i);
}
QwtScaleDiv sdv; //눈금위젯에 보고자 하는 범위 지정
sdv.setInterval(0.0,100.0);
sdv.setTicks(2,majorTicks);
rightAxis->setScaleDiv(sdv);
layout=new QHBoxLayout(); //레이아웃에 눈금위젯을 넣음
layout->setMargin(0);
layout->setSpacing(0);
setLayout(layout);
layout->addWidget(rightAxis);
setStyleSheet("QWdiget {background:transparent;border:none;}");
}
colormap::~colormap()
{
delete rightAxis;
delete layout;
}
void colormap::setRange(double absMin, double absMax, double curMin, double curMax) //범위지정 함수
{
if(absMin>absMax||absMin>curMin||absMin>curMax) //값이 잘못입력되었을 경우 나감
return;
if(absMax<curMin||absMax<curMax)//값이 잘못입력되었을 경우 나감
return;
if(curMin>curMax)//값이 잘못입력되었을 경우 나감
return;
QwtInterval zInterval; //컬러맵 전체 길이
zInterval.setInterval(absMin,absMax,QwtInterval::IncludeBorders);
rightAxis->setColorMap(zInterval,new ColorMap());
double interval=(curMax-curMin)/10.0; //눈금 10개 표현을 위해 최대값과 최소값의 차이를 10등분함
QList<double> majorTicks;
for(int i=0;i<11;i++)
{
majorTicks.push_back(curMin+interval*i); //10등분한 값을 차례대로 삽입
}
QwtScaleDiv sdv;
sdv.setInterval(((curMin-absMin)/(absMax-absMin))*100.0+absMin,((curMax-absMin)/(absMax-absMin))*100.0+absMin);//확대한 최소값과 최대값 넣음
sdv.setTicks(2,majorTicks); //눈금값을 넣음
rightAxis->setScaleDiv(sdv); //축위젯에 값을 넣음
}
댓글 없음:
댓글 쓰기