Qwt中,刻度尺scale很重要,也很简单美观,有直尺和环形比例尺等。和直尺相关的类主要有:QwtScaleMap, QwtScaleDiv, QwtScaleDraw, QwtScaleWidget.QwtScaleMap比例尺映射类提供了比例尺坐标系和绘图设备坐标系之间的映射关系,其主要的功能靠QwtTransform类实现。QwtScaleDiv标尺刻度分隔类,一个刻度尺的刻度划分包括起始值、主刻度、次刻度、最小刻度。多数情况下,刻度划分由QwtScaleEngine的派生类自动计算。QwtScaleDraw是绘制标尺类,它继承自抽象基类QwtAbstractScaleDraw,用于绘制普通直尺,一个刻度尺由多个部分组成,由QwtAbstractScaleDraw::ScaleComponent定义:Backbone(主干)、Ticks(刻度线)、Labels(标签)。QwtScaleWidget类是标尺部件,用于显示绘制的标尺,继承自QWidget.QwtScaleEngine是刻度尺引擎类QwtTransform类用来转换坐标系统./QwtScaleMap类参考:公有成员函数:• QwtScaleMap ()• QwtScaleMap (const QwtScaleMap &)• ∼QwtScaleMap ()• QwtScaleMap & operator= (const QwtScaleMap &); //复制构造函数• void setTransformation (QwtTransform ∗); //设置转换映射• const QwtTransform ∗ transformation () const; //获取转换• void setPaintInterval (double p1 , double p2); //设置绘图设备间隔边界• void setScaleInterval (double s1 , double s2); //设置刻度尺间隔• double transform (double s) const; //把刻度尺上间隔对应的点转换为绘图设备上的点• double invTransform (double p) const; //转换一个绘图设备值为刻度尺的间隔值• double p1 () const; //返回绘图间隔的第一个边界• double p2 () const; //返回绘图间隔的第二个边界• double s1 () const; //返回刻度尺间隔的第一个边界• double s2 () const; //返回刻度尺间隔的第二个边界• double pDist () const; //返回qwtAbs( p2() - p1() )• double sDist () const; //返回qwtAbs( s2() - s1() )• bool isInverting () const; //如果( p1() < p2() ) != ( s1() < s2() ), 返回true静态公有成员函数:• static QRectF transform (const QwtScaleMap &, const QwtScaleMap &, const QRectF &);//将刻度尺中一个矩形转换到绘图坐标中.参数:x map, y map, 在刻度尺坐标中的矩形• static QRectF invTransform (const QwtScaleMap &, const QwtScaleMap &, const QRectF &)• static QPointF transform (const QwtScaleMap &, const QwtScaleMap &, const QPointF &)• static QPointF invTransform (const QwtScaleMap &, const QwtScaleMap &, const QPointF &)/QwtScaleDiv类参考:公有成员类型:• enum TickType {NoTick = -1, MinorTick, MediumTick, MajorTick,NTickTypes }//刻度尺刻度类型公有成员函数:• QwtScaleDiv (double lowerBound=0.0, double upperBound=0.0);• QwtScaleDiv (const QwtInterval &, QList < double >[NTickTypes]);• QwtScaleDiv (double lowerBound, double upperBound, QList < double >[NTickTypes]);• QwtScaleDiv (double lowerBound, double upperBound, const QList < double > &minorTicks,const QList <double > &mediumTicks, const QList < double > &majorTicks);• bool operator== (const QwtScaleDiv &) const;• bool operator!= (const QwtScaleDiv &) const;• void setInterval (double lowerBound, double upperBound); //设置间隔• void setInterval (const QwtInterval &);• QwtInterval interval () const; //获取间隔• void setLowerBound (double); //设置低边界• double lowerBound () const; //获取低边界• void setUpperBound (double); //设置高边界• double upperBound () const; //获取高边界• double range () const; //返回区间: upperBound() - lowerBound()• bool contains (double value) const; //如果一个值在lowerBound()和upperBound()之间,返回true• void setTicks (int tickType, const QList < double > &); //设置刻度线//参数: type: MinorTick, MediumTick, MajorTick ; 刻度线位置值• QList < double > ticks (int tickType) const; //获取刻度线的值• bool isEmpty () const; //检查标尺间隔是否为空:empty( lowerBound() == upperBound() )• bool isIncreasing () const; //判断是否刻度尺间隔是增加的,即lowerBound() <= upperBound().• void invert (); //转换刻度尺间隔• QwtScaleDiv inverted () const; //返回一个倒置的带有边界和刻度的刻度尺• QwtScaleDiv bounded (double lowerBound, double upperBound) const;//返回一个刻度的间隔[下界,上限],在这个区间之外所有刻度线被删除/QwtScaleDraw类参考:QwtScaleDraw是用来绘制刻度尺的类,从QwtAbstractScaleDraw继承,派生出QwtDateScaleDraw.公有类型:• enum Alignment { BottomScale, TopScale, LeftScale, RightScale }公有成员函数:• QwtScaleDraw ()• virtual ∼QwtScaleDraw ()• void getBorderDistHint (const QFont &, int &start, int &end) const;//获取暗示的(最小的)边界距离• int minLabelDist (const QFont &) const; //返回两个标签的最小距离• int minLength (const QFont &) const; //返回绘制刻度尺的最小长度• virtual double extent (const QFont &) const;//计算垂直/水平刻度尺的宽度/高度//伸展被画笔宽度计算,画笔宽度可以是backbone主干,主刻度线长,spacing和标签的最大宽度/高度。//常用的是用于绘制标签的字体• void move (double x, double y); //移动刻度尺的位置• void move (const QPointF &);• void setLength (double length); //设置刻度尺主干的长度• Alignment alignment () const; //返回刻度尺的排列方式• void setAlignment (Alignment); //设置刻度尺的排布方式,默认QwtScaleView::BottomScale• Qt::Orientation orientation () const; //返回方向//TopScale,BottomScale是Qt::Horizontal; LeftScale,RightScale是Qt::Vertical• QPointF pos () const; //刻度线的原点• double length () const; //返回刻度线的主干长度• void setLabelAlignment (Qt::Alignment); //设置标签的排列方式QwtScaleDraw::TopScale: Qt::AlignHCenter | Qt::AlignTop\nQwtScaleDraw::BottomScale: Qt::AlignHCenter | Qt::AlignBottom\nQwtScaleDraw::LeftScale: Qt::AlignLeft | Qt::AlignVCenter\nQwtScaleDraw::RightScale: Qt::AlignRight | Qt::AlignVCenter\n• Qt::Alignment labelAlignment () const; //返回标签的排列方式• void setLabelRotation (double rotation); //设置标签的旋转角度• double labelRotation () const; //返回标签的旋转角度• int maxLabelHeight (const QFont &) const; //返回标签的最大高度• int maxLabelWidth (const QFont &) const; //返回标签的最大宽度• QPointF labelPosition (double val) const; //返回标签位置• QRectF labelRect (const QFont &, double val) const; //返回标签矩形• QSizeF labelSize (const QFont &, double val) const; //返回标签大小• QRect boundingLabelRect (const QFont &, double val) const; //返回标签的边界矩形(绝对坐标)受保护的成员函数:• QTransform labelTransformation (const QPointF &, const QSizeF &) const//基于排列方式和旋转角度计算绘制一个标签的转换//参数:pos: 标签的位置点; size:标签的大小• virtual void drawTick (QPainter ∗, double val, double len) const; //绘制一个刻度• virtual void drawBackbone (QPainter ∗) const; //绘制刻度线的主干• virtual void drawLabel (QPainter ∗, double val) const; //为主要的标尺刻度绘制标签/QwtScaleWidget类参考:QwtScaleWidget是一个包含刻度尺的控件,继承于QWidget。公有类型:• enum LayoutFlag { TitleInverted = 1 }//标题的布局标志flag• typedef QFlags < LayoutFlag > LayoutFlags信号:• void scaleDivChanged ()//当刻度尺间隔改变时发射信号公有成员函数:• QwtScaleWidget (QWidget ∗parent=NULL); //创建一个位置为QwtScaleWidget::Left的刻度尺• QwtScaleWidget (QwtScaleDraw::Alignment, QWidget ∗parent=NULL)• virtual ∼QwtScaleWidget ()• void setTitle (const QString &title); //设置QString标题• void setTitle (const QwtText &title); //设置QwtText标题• QwtText title () const; //获取标题• void setLayoutFlag (LayoutFlag, bool on); //设置布局标志• bool testLayoutFlag (LayoutFlag) const; //测试指定的布局标志是否存在• void setBorderDist (int start, int end); //设置边界距离• int startBorderDist () const; //起始边界距离• int endBorderDist () const; //结束边界距离• void getBorderDistHint (int &start, int &end) const; //获取边界距离暗示• void getMinBorderDist (int &start, int &end) const; //获取最小边界距离• void setMinBorderDist (int start, int end); //设置最小边界距离• void setMargin (int); //设置到颜色条/基线的边缘• int margin () const; //返回边缘• void setSpacing (int td); //设置颜色条、比例尺和标题之间的距离• int spacing () const; //返回距离• void setScaleDiv (const QwtScaleDiv &sd); //设置标尺分隔• void setTransformation (QwtTransform ∗): //设置转换• void setScaleDraw (QwtScaleDraw ∗); //设置标尺绘制类• const QwtScaleDraw ∗ scaleDraw () const;• QwtScaleDraw ∗ scaleDraw ();• void setLabelAlignment (Qt::Alignment); //设置标签布局• void setLabelRotation (double rotation); //设置标签旋转角度// QwtScaleDraw::setLabelRotation().• void setColorBarEnabled (bool); //设置颜色条是否可使用• bool isColorBarEnabled () const; //判断颜色条是否可使用• void setColorBarWidth (int); //设置颜色条宽度• int colorBarWidth () const; //返回颜色条宽度• void setColorMap (const QwtInterval &, QwtColorMap ∗); //设置颜色映射• QwtInterval colorBarInterval () const; //返回颜色条间隔• const QwtColorMap ∗ colorMap () const; //返回颜色映射• virtual QSize sizeHint () const; //返回大小暗示• virtual QSize minimumSizeHint () const; //返回最小尺寸暗示• int titleHeightForWidth (int width) const; //为指定的宽度返回标题的高度• int dimForLength (int length, const QFont &scaleFont) const;//Find the minimum dimension for a given length.//dim is the height, length the width seen in direction of the title.• void drawColorBar (QPainter ∗painter, const QRectF &) const; 绘制颜色条• void drawTitle (QPainter ∗painter, QwtScaleDraw::Alignment, const QRectF &rect) const; //绘制标题• void setAlignment (QwtScaleDraw::Alignment); //设置排列方式• QwtScaleDraw::Alignment alignment () const; //返回排列方式• QRectF colorBarRect (const QRectF &) const; //返回颜色条矩形受保护的成员函数:• virtual void paintEvent (QPaintEvent ∗)• virtual void resizeEvent (QResizeEvent ∗)• void draw (QPainter ∗p) const• void scaleChange ()• void layoutScale (bool update=true)/QwtScaleEngine类参考:QwtScaleEngine是刻度尺引擎类的基类。继承关系如下:公有类型:• enum Attribute {NoAttribute = 0x00, IncludeReference = 0x01, Symmetric = 0x02, Floating = 0x04,Inverted = 0x08 }• typedef QFlags < Attribute > Attributes//布局属性公有成员函数:• QwtScaleEngine (uint base=10)• virtual ∼QwtScaleEngine ()• void setBase (uint base); //设置刻度尺引擎的基数,默认10• uint base () const; //返回基数• void setAttribute (Attribute, bool on=true); //设置属性• bool testAttribute (Attribute) const; //测试属性是否设置• void setAttributes (Attributes); //设置属性• Attributes attributes () const; //返回属性• void setReference (double reference); //设置一个参考点• double reference () const; //返回参考点• void setMargins (double lower, double upper); //设置标尺结束点边缘• double lowerMargin () const; //返回标尺结束端较小者边缘,默认0• double upperMargin () const;• virtual void autoScale (int maxNumSteps, double &x1, double &x2, double &stepSize) const =0;//x1: 区间的第一个临界,x2: 区间的第二个临界,stepSize:步长(返回值)• virtual QwtScaleDiv divideScale (double x1, double x2, int maxMajorSteps, int maxMinorSteps,double stepSize=0.0) const =0;//划分刻度尺.x1: 第一个临界点,x2:第二个临界点. 大间隔的最大数量. 小间隔的最大数量.• void setTransformation (QwtTransform ∗); //设置排列方式• QwtTransform ∗ transformation () const; //返回排列方式受保护的成员函数:• bool contains (const QwtInterval &, double val) const;//判断一个区间是否包含一个值• QList < double > strip (const QList < double > &, const QwtInterval &) const• double divideInterval (double interval, int numSteps) const;//分裂区间,参数: 区间大小 ,步长值. 返回区间大小的步长值• QwtInterval buildInterval (double v) const//用一个值构建一个区间,如果值是0.0,区间是【-0.5,0.5】,否则是[-0.5*v,0.5*v];
















