如何从 QGraphicsLineItem 中正确 derive/inherit?
How to properly derive/inherit from a QGraphicsLineItem?
我正在尝试创建一个名为 Edge 的自定义 QGraphicsLineItem
,但我做得不好我是 Qt
的新手。
现在,例如,我不能在没有错误的情况下执行 scene->add(edgeItem)
从 'Edge
' 到 'QGraphicsItem
*' 的可行转换。
我的edge.h
#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
我的edge.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 class 实例时,请按此方式进行。
Edge* someinstance = new Edge();
scene->addItem(someinstance);
我假设你正在做的是。
Edge instance;
scene->addItem(instance);
因此编译器尝试将 Edge 对象隐式转换为 QGraphicsItem* 对象,这是不可能的。
我正在尝试创建一个名为 Edge 的自定义 QGraphicsLineItem
,但我做得不好我是 Qt
的新手。
现在,例如,我不能在没有错误的情况下执行 scene->add(edgeItem)
从 'Edge
' 到 'QGraphicsItem
*' 的可行转换。
我的edge.h
#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
我的edge.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 class 实例时,请按此方式进行。
Edge* someinstance = new Edge();
scene->addItem(someinstance);
我假设你正在做的是。
Edge instance;
scene->addItem(instance);
因此编译器尝试将 Edge 对象隐式转换为 QGraphicsItem* 对象,这是不可能的。