首页 > 代码库 > qwt总结1

qwt总结1

废话不想太多,说下自己的使用总结。

一般来说,对于一个图表。 可能的话,应该有一个坐标轴,QWT中,是用QwtPlot这个类 来描述一个图的坐标系图(只表示坐标系的背景,没有描点)。坐标(刻度)的设置,是使用其他类(如类名带有Axis、Scale)来设置的,但是他们大多设置的是相应的样式细节,具体的数值依然是由Plot设置。比如,我想设置一个坐标系的横坐标范围,是使用Plot中的  setAxisScale这个函数来完成。(名字翻译起来,感觉逻辑对不上,哎,原谅我愚笨的英语水平)

 

 

    setAxisScale( QwtPlot::xBottom,-0.5,6.5,1); //设置坐标轴的范围

    setAxisScale( QwtPlot::yLeft,0,30);

 

 

第一个参数。。看名字就能知道它意思了。后面就是范围。 设置轴刻度线。好吧。

然后还有个函数,是用来获取 图的背景中的画布(canvas)的。 就是获取Plot中应该有的canvas()函数,就能获得相应的画布。(这里我没有玩过,到时候看看)

然后,刻度线的样式,是使用setAxisScaleDraw,来获取一个ScaleDraw对象,来描述刻度线的,里面有一个label虚函数,它是主要用来重载的,这样能设置坐标轴上 主刻度线,副刻度线和单位刻度线 的 长度 颜色 等风格。

 

在图表中,最重要的应该是数据的设置了,这里我只使用了一种柱状图。柱状图的特征是 横坐标是一种interval(间隔)。纵坐标是一个值。因此,在设置数据的时候,使用的是函数setData 其参数是 QwtIntervalSeriesData  中文翻译过来 是 间隔的一系列的数据

setData( new QwtIntervalSeriesData( samples ) );

QwtIntervalSeriesData构造函数所传递的参数类型是

 

QVector<QwtIntervalSample>

 

 

QwtIntervalSample构造了一段 (xi-xj,y) 或者(x,yi-yj)类型的数据。不过  构造函数的第一个参数是一个QwtInterval 即一个数的范围,第二个参数就是一个点。具体使用xi-xj 还是yi-yj  这好像是根据 具体使用的图 而决定的。

代码:

  int numValues = ques_page_vector.size();

 

    QVector<QwtIntervalSample> samples( numValues );

 

    for ( int i = 0; i < numValues; i++ )

 

    {

 

        QwtInterval interval( double( i  - 0.25 ), i + 0.25 );

 

        interval.setBorderFlags( QwtInterval::ExcludeMaximum );

 

        int t = ques_page_vector[i];

 

        double q = (*dataWidget->question_perScore)[t];

 

        samples[i] = QwtIntervalSample( q , interval );

 

    }


最后一个设置的东西就是 Legend(图例)

 

 

使用方法是先 new 一个QwtLegend 类

然后使用setItemMode 来确定Legend的模式。

最后调用Plot中的insertLegend方法,将Legend插入。

 希望慢慢锻炼能练起来吧~~~加油!