QGraphicsObject的继承使用
介绍
之所以引入QGraphicsObject是因为突然发现QGraphicsItem继承对象中无法使用QObject::connect()函数,该函数是QObject所有的函数,在非静态使用时需要继承QObject类。
根据上边的情况我先采用了
- 多重继承
QObject
和QGraphicsItem
的方法实现,代码如下:
class graphicsItemObj : public QObject, public QGraphicsItem
- 继承
QGraphicsObject
类,说明如下:
之后发现其实QGraphics
系列其实已经帮我们想到了,有一个QGrapObject
类,该类同时继承了QObject
和QGraphicsItem
,源代码如下:
//path: \src\gui\graphicsview\qgraphicsitem.h
class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
继承后编译不过报错处理
Error: Class declarations lacks Q_OBJECT macro.
未在开始添加Q_OBJECT
宏,添加即可,下边代码是一个比较完整的继承实现:
//GraphicsItemObject.h
#ifndef GRAPHICSITEMOBJECT_H
#define GRAPHICSITEMOBJECT_H
#include <QGraphicsObject>
class GraphicsItemObject : QGraphicsObject
{
Q_OBJECT //notice add this macro
public:
GraphicsItemObject(QGraphicsItem *parent = 0);
~GraphicsItemObject();
virtual QRectF boundingRect() const {}
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) {}
private:
};
#endif // GRAPHICSITEMOBJECT_H
//GraphicsItemObject.cpp
#include "graphicsitemobject.h"
#include <QtGui/QtGui>
GraphicsItemObject::GraphicsItemObject(QGraphicsItem *parent)
:QGraphicsObject(parent)
{
}
GraphicsItemObject::~GraphicsItemObject()
{
}
注意
请注意有两个函数是纯虚函数,在继承时一定要实现,否则就会报错编译不过。
public:
virtual QRectF boundingRect() const {}
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) {}