如何正确地从 QGraphicsLineItem 派生/继承?



我正在尝试创建一个名为 Edge 的自定义QGraphicsLineItem,但我做得不好,我是Qt的新手。 目前,我无法在没有错误的情况下进行scene->add(edgeItem)没有从"Edge"到"QGraphicsItem*"的可行转换。

我的优势。

#ifndef EDGE_H
#define EDGE_H
#include <QWidget>
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>

class Edge:public QGraphicsLineItem
{
private:
QGraphicsEllipseItem * state1;
QGraphicsEllipseItem * state2;
public:
enum { Type = UserType + 2 };
int type() const override;
Edge(QGraphicsEllipseItem * s1, QGraphicsEllipseItem* s2);
QGraphicsEllipseItem *getState1() const;
void setState1(QGraphicsEllipseItem *value);
QGraphicsEllipseItem *getState2() const;
void setState2(QGraphicsEllipseItem *value);

QList<QPointF> centerPoints();
};
#endif // EDGE_H

我的优势.cpp

#include "edge.h"
#include <QGraphicsEllipseItem>
Edge::Edge(QGraphicsEllipseItem* s1, QGraphicsEllipseItem* s2)
{
setState1(s1);
setState2(s2);
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemSendsScenePositionChanges);
setFlag(QGraphicsItem::ItemIsSelectable);
}
int Edge::type() const
{
return Type;
}
QGraphicsEllipseItem *Edge::getState1() const
{
return state1;
}
void Edge::setState1(QGraphicsEllipseItem *value)
{
state1 = value;
}
QGraphicsEllipseItem *Edge::getState2() const
{
return state2;
}
void Edge::setState2(QGraphicsEllipseItem *value)
{
state2 = value;
}

QList<QPointF> Edge::centerPoints()
{
QPointF point1(state1->rect().x() + state1->rect().width()/2,state1->rect().y()+ state1-> rect().height()/2);
QPointF point2(state2->rect().x()+state2->rect().width()/2,state2->rect().y()+ state2-> rect().height()/2);
QList<QPointF> list;
list.append(point1);
list.append(point2);
return list;
}

有人可以告诉我如何修改我的 Edge 以使其成为"真正的"QGraphicsItem吗?

下面是正确继承的示例

所以.h

class Edge: public QGraphicsLineItem
{
public:
Edge(QGraphicsEllipseItem * s1 = nullptr, QGraphicsEllipseItem* s2= nullptr, QGraphicsItem* parent = nullptr);
//.....

};

.cpp

Edge::Edge(QGraphicsEllipseItem * s1, QGraphicsEllipseItem* s2, QGraphicsItem* parent) 
:QGraphicsLineItem( parent)
{
//.........
}

创建 Edge 类实例时,请执行此操作。

Edge* someinstance = new Edge(); 
scene->addItem(someinstance);

我想你正在做的是。

Edge instance;
scene->addItem(instance);

因此,编译器尝试将边缘对象隐式转换为 QGraphicsItem* 对象是不可能的。

最新更新