Qwt中坐标轴的设置

    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 );
}

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值