1自定义坐标轴
x轴设置为系统时间(分钟,秒数)代码如下
class TimeScaleDraw: public QwtScaleDraw //自画坐标轴
{
public:
TimeScaleDraw()
{
}
virtual QwtText label( double v ) const //重绘坐标轴 刻度值
{
QDateTime dt;
dt.setTime_t((int)v); //获取时间
return dt.toString("mm:ss"); //转变为字符串 分秒 在刻度为最长的位置显示值
}
};
setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDraw());
setAxisScale(QwtPlot::xBottom, QDateTime::currentDateTime().toTime_t() - 10, QDateTime::currentDateTime().toTime_t()); //标尺范围
y轴设置为只让某些数值显示
class VScaleDraw: public QwtScaleDraw //自画坐标轴
{
public:
VScaleDraw()
{
}
virtual QwtText label( double v ) const //重绘坐标轴 刻度值
{
return QwtText( QString::number( v/10 ) ); //默认的 大刻度的时候 才会显示
}
};
setAxisScaleDraw(QwtPlot::yLeft,new VScaleDraw()); //不能与自动伸缩同时使用
setAxisScale( QwtPlot::yLeft, 0.0, 100.0 );
y轴坐标显示的刻度值就不是0-100而是0-10之间
2 坐标轴间隔的设置
x轴设置的范围
setAxisScale( QwtPlot::yBottom, 0.0, 100.0 );
设置x轴显示的最大间隔数最多为10,将范围分为了10个大间隔,也就是显示x轴长刻度值的时候为0;10;20;30;40;50;60;70;80;90;100
setAxisMaxMajor( QwtPlot::xBottom, 10 );
将上述x轴的每个大间隔设置为显示最多5个小间隔,也就是将长刻度值0与10之间分为了5个小间隔: 0 2 4 6 8 10 其中2\4\6\8为短刻度值
setAxisMaxMinor( QwtPlot::xBottom, 5 );
上述中的显示的间隔数都得到了是最多,坐标轴的值由于某种原因(缩放操作,动态增长等)会导致对应的大小间隔发生变化。
3 坐标轴中长\短刻度的设置
设置Y坐标轴的长\短刻度,注设置MajorTick的数值,就会显示自定义坐标轴设置显示的刻度值
void datadisplay::setaxis_tick()
{
QList<double> ticks[QwtScaleDiv::NTickTypes];
ticks[QwtScaleDiv::MajorTick] << 0 << 10 ; //0和10处显示长刻度,坐标轴也只显示0与10
for( int i = 1; i < 10; i++)
ticks[QwtScaleDiv::MajorTick] << i; //1-9显示短刻度
QwtScaleDiv scaleDiv(
ticks[QwtScaleDiv::MajorTick].first(),
ticks[QwtScaleDiv::MajorTick].last(),
ticks );
setAxisScaleDiv(QwtPlot::yLeft, scaleDiv);
}
4 设置坐标轴自动伸缩
设置Y坐标轴自动伸缩。根据绘图数据自动控制Y坐标轴。
setAxisAutoScale(QwtPlot::yLeft, true);
注如果是自定义坐标轴,便不能使用坐标轴自动伸缩
5 设置坐标轴中刻度的样式
void datadisplay::set_tick_style()
{
for ( int i = 0; i < QwtPlot::axisCnt; i++ ) //遍历轴
{
QwtScaleWidget *scaleWidget = axisWidget( i ); //0是yleft 2是xbottom axisCnt是枚举型 F2一下就知道 四个轴对应的数值
if ( scaleWidget )
scaleWidget->setMargin( 0 ); //设置刻度值与坐标轴的间隔
QwtScaleDraw *scaleDraw = axisScaleDraw( i );
if ( scaleDraw )
scaleDraw->enableComponent( QwtAbstractScaleDraw:: Backbone, false ); //设置刻度值样式 true表示禁用 false表示可用
}
//设置对齐画布、坐标轴、刻度
plotLayout()->setAlignCanvasToScales( true );
}