使用 Qt 类进行多重继承
Multiple inheritance with Qt classes
我有一个继承QGraphicsItem的类A,另一个继承QgraphicsLineItem的B类。B 如何继承 A 类
A类:公共QObject,公共QGraphicsItem {
}
类 B : 公共 QObject, 公共 QGraphicsLineItem {}
A 如何被 B 继承?
我的问题如下:
使用虚拟克隆方法()的类
#include <QGraphicsItem>
class getEntity : public QObject, public QGraphicsItem
{
public:
getEntity(QObject *parent = 0) : QObject(parent) {}
virtual ~getEntity() {}
virtual getEntity *clone() { return 0; }
};
堆栈.h
#include <QStack>
#include "getEntity.h"
class clipboardStack
{
public:
static clipboardStack *instance()
{
if (!inst)
inst = new clipboardStack;
return inst;
}
void push(getEntity *entity)
{
clips.push(entity);
}
getEntity *pasteEntity()
{
if (clips.count() == 0)
return 0;
return clips.last();
}
getEntity *pop()
{
if (clips.count() == 0)
return 0;
return clips.pop();
}
bool isEmpty() const
{
return clips.empty();
}
private:
QStack<getEntity *> clips;
static clipboardStack *inst;
};
圆圈.h
#include <QPainter>
#include <QGraphicsItem>
#include "qmath.h"
#include "operations/getEntity.h"
#include "operations/clipboardstack.h"
class Circle : QGraphicsItem , public getEntity
{
Q_OBJECT
public:
Circle(QObject *parent = 0) : getEntity(parent) {}
Circle(int, QPointF, QPointF);
Circle(int, QPointF, qreal);
QRectF boundingRect() const;
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget);
enum { Type = UserType + 3 };
int type() const;
int id;
QPointF centerP, endP;
qreal radius;
getEntity *clone();
private:
QVector<QPointF> stuff;
};
线路问题行.H
#include <QPainter>
#include <QGraphicsLineItem>
#include "operations/getEntity.h"
class Line : public QObject, public QGraphicsLineItem
{
Q_OBJECT
public:
Line(QObject *parent = 0) : getLine(parent) {}
Line(int, QPointF, QPointF);
QRectF boundingRect() const;
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget);
enum { Type = UserType + 2 };
int type() const;
int id;
QPointF startP, endP;
private:
QVector<QPointF> stuff;
};
CADGRAPHICSSCENE .cpp
void CadGraphicsScene::cutEntity(getEntity *obj)
{
removeItem(obj);
clipboardStack::instance()->push(obj);
}
void CadGraphicsScene::copyEntity(getEntity *obj)
{
clipboardStack::instance()->push(obj->clone());
}
void CadGraphicsScene::pasteEntity(const QPointF &pos)
{
getEntity *pasteEntity = clipboardStack::instance()->pop();
if (pasteEntity)
{
addItem(dynamic_cast<QGraphicsItem *>(pasteEntity));
pasteEntity->setPos(pos);
pasteEntity->setFlag(QGraphicsItem::ItemIsSelectable);
pasteEntity->setFlag(QGraphicsItem::ItemIsMovable);
mUndoStack->push(new CadCommandAdd(this, pasteEntity));
}
}
您可以使用 QGraphicsObject 代替 QGraphicsItem,后者为您提供所需的信号/插槽机制,而无需多重继承。
您在评论中还提到:-
[继承] 来自 QgraphicsLineItem 的行和来自 QgraphicsTextItem 的文本
与其扩展 QGraphicsLineItem 和 QGraphicsTextItem,不如从 QGraphicsItem 或 QGraphicsObject 继承,就像对圆、椭圆和点所做的那样。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- qt qsharedDatapointer多重继承钻石图案
- Qt、多重继承、包装器或事件过滤器
- 使用 Qt 类进行多重继承
- Qt QTableView多重继承方法