QwtClipper 类提供了一些裁剪算法,均为静态函数。因此QwtClipper 类实际上是一个静态工具类,是全局函数的一个替代方案。
Some clipping algos.
具体说来包括三个算法:
class QWT_EXPORT QwtClipper { public: static QPolygon clipPolygon( const QRect &, const QPolygon &, bool closePolygon = false ); // 裁剪多边形(整型坐标) static QPolygonF clipPolygonF( const QRectF &, const QPolygonF &, bool closePolygon = false ); // 裁剪多边形(浮点数坐标) static QVector<QwtInterval> clipCircle( const QRectF &, const QPointF &, double radius ); // 裁剪圆 };
代码分析:
1)在通常的编码中,我们可能习惯将这些算法定义为全局函数,而在面向对象的系统设计中,过多的全局函数会带来混乱和困惑。如果按照类别(例如这里的“裁剪”)将其分类定义为静态方法。除了能达到全局访问的目的外,还能有效的实现封装。实为良策!
2)实现代码示例:
/*! Circle clipping clipCircle() devides a circle into intervals of angles representing arcs of the circle. When the circle is completely inside the clip rectangle an interval [0.0, 2 * M_PI] is returned. \param clipRect Clip rectangle \param center Center of the circle \param radius Radius of the circle \return Arcs of the circle */ QVector<QwtInterval> QwtClipper::clipCircle( const QRectF &clipRect, const QPointF ¢er, double radius ) { QwtCircleClipper clipper( clipRect ); return clipper.clipCircle( center, radius ); }
QwtCircleClipper 类实现了“裁剪圆”算法的实际功能,但是其本身并未向外暴露,很好的实现了信息隐藏。