QwtPainter类提供了QPainter类相关方法的集合,主要是对QPainter诸多方法的包装。
代码分析:
1)QwtPainter类定义了两个静态属性数据:
private: static bool d_polylineSplitting; static bool d_roundingAlignment;
在cpp文件中对其进行了初始化:
bool QwtPainter::d_polylineSplitting = true; bool QwtPainter::d_roundingAlignment = true;
2)属性值的set/get接口:
class QWT_EXPORT QwtPainter { public: static void setPolylineSplitting( bool enable); static bool polylineSplitting(); static void setRoundingAlignment( bool enable); static bool roundingAlignment(); static bool roundingAlignment(QPainter *); // .... };
3)在cpp中定义了3个static inline 函数:
关于 static inline 函数:static inline bool isClippingNeeded( const QPainter *painter, QRectF &clipRect ) { bool doClipping = false; const QPaintEngine *pe = painter->paintEngine(); if ( pe && pe->type() == QPaintEngine::SVG ) { // The SVG paint engine ignores any clipping, if ( painter->hasClipping() ) { doClipping = true; clipRect = painter->clipRegion().boundingRect(); } } return doClipping; }
a)static 指定了该接口的作用域仅限在当前源文件中使用。也就是说,如果我们封装的接口只会在某一个源文件(或只有自己)用到时,那么应该将其定义在该源文件中,并声明为“静态全局函数” 。这其实一种信息隐藏。那么,为什么这种隐藏是有用的?因为这些函数为了统一接口,大家都需要实现这个接口(例如greaterThan()等),如果不用static,就很有可能重名。从而导致编译出错。
b) inline 建议编译器对该函数使用内联展开。可是,不是说内联函数只能定义在头文件中吗?求解!
刚百度了一下,有位大侠的说法不错(但不知道是不是只是标准C的情况):
【static inline 的内联函数,一般情况下不会产生函数本身的代码,而是全部被嵌入在被调用的地方。如果不加static,则表示该函数有可能会被其他编译单元所调用,所以一定会产生函数本身的代码。所以加了static,一般可令可执行文件变小。内核里一般见不到只用inline的情况,而都是使用static inline。 】
原文链接:
http://blog.chinaunix.net/uid-26285146-id-3225668.html