Qwt中坐标轴的设置

来源:互联网 发布:物流信息软件 编辑:程序博客网 时间:2024/04/29 02:17

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

1 0
原创粉丝点击