首页 > 解决方案 > 如何正确地从 QGraphicsLineItem 派生/继承?

问题描述

我正在尝试创建一个QGraphicsLineItem名为 Edge 的自定义,但我做得不好,我是Qt. 现在,例如,我不能没有错误地从 ' ' 到 ' *'进行scene->add(edgeItem)可行的转换。EdgeQGraphicsItem

我的边缘.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

我的边缘.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吗?

标签: qtqgraphicsitem

解决方案


这是一个正确继承的例子

所以.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)
{
 //.........
}

推荐阅读