刚才说到QGraphicsItemGroup中并没有声明pos属性, 理论上自己声明一个即可. 沿着这个思路继续向下走,在Assistant中可以找到对定义一个属性需要声明Q_PROPERTY宏.
Q_PROPERTY(type name
READ getFunction
[WRITE setFunction]
[RESET resetFunction]
[NOTIFY notifySignal]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool]
[USER bool]
[CONSTANT]
[FINAL])
其中的内容按着命名其实很好理解, 第一个就是属性的名字了(如pos), 第二第三第四就是常见的get方法,set方法,reset方法, 在下面是属性更改时发出的信号.
结合刚才从QGraphicsObject的源码来看其中的pos属性声明是这样的
Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)嚯嚯, 这货通名叫"pos", 通过一个pos()方法读取值, 通过一个setPos()方法设定新值. 而其实pos(), setPos()是经常和我们打交道的..这个再QGraphicItem中就已经帮我们实现好的了
所以在这里我们甚至都不需要自己再去重新实现pos(), setPos()方法了.So直接在Copy前面的代码,并在GraphicsItemGroup类中把
Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)
加上去
class GraphicsItermGroup : public QObject , public QGraphicsItemGroup{Q_OBJECTpublic:
explicit GraphicsItermGroup(const QRect &rect, QObject *parent = 0);QRectF boundingRect() const;Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)...}测试一下, 一切正常...效果实现了.