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 类实现了“裁剪圆”算法的实际功能,但是其本身并未向外暴露,很好的实现了信息隐藏。