我正在尝试创建一个名为 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* 对象是不可能的。