2014-11-14 65 views
0

我试图让一个弧形,但得到以下错误:错误:无法分配一个对象

error: cannot allocate an object of abstract type 'arc' 
       arcItem = new arc(++id, startP, midP, endP); 

能否请你帮我解决了错误。我的代码如下。在mousepress事件中,我得到了cadgraphicsscene.cpp类中的错误。

cadgraphicsscene.cpp

void CadGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) 
    { 
     // mousePressEvent in the graphicsScene 
     if(mouseEvent->button() == Qt::LeftButton) 
     { 
      switch (entityMode) 
      { 

      case ArcMode: 
       if (mFirstClick) 
       { 
        startP = mouseEvent->scenePos(); 
        mFirstClick = false; 
        mSecondClick = true; 
       } 

       else if (!mFirstClick && mSecondClick) 
       { 
        midP = mouseEvent->scenePos(); 
        mFirstClick = false; 
        mSecondClick = false; 
        mThirdClick = true; 
       } 

       else if (!mSecondClick && mThirdClick) 
       { 
        endP = mouseEvent->scenePos(); 
        mThirdClick = false; 
        mPaintFlag = true; 
       } 

       if (mPaintFlag) 
       { 
        arcItem = new arc(++id, startP, midP, endP); 
        itemList.append(arcItem); 
        mUndoStack->push(new CadCommandAdd(this, arcItem)); 
        setFlags(); 
       } 
      } 
     } 
    } 

arc.h

include <QGraphicsItem> 

#include "qmath.h" 
class arc : public QObject, public QGraphicsItem 
{ 
    Q_OBJECT 
public: 
    arc(int, QPointF, QPointF, QPointF); 
    arc(int, QLineF, QLineF); 


    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, 
         QWidget *widget); 
    enum { Type = UserType + 6 }; 
    int type() const; 
    int id; 

    QPointF startP, midP, endP, p1, p2, p3,center; 
    QLineF lineBC; 
    QLineF lineAC; 
    QLineF lineBA; 
    QLineF lineOA; 
    QLineF lineOC; 
    QLineF bisectorBC; 
    QLineF bisectorBA; 
    QGraphicsEllipseItem *ellipse; 
    qreal rad; 

private: 
    QVector<QPointF> stuff; 

}; 
+1

你需要重写[boundingRect](http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#boundingRect)纯虚拟成员函数,不仅仅是'paint'一个 – 2014-11-14 12:27:00

+0

对不起没有得到你。你能用例子的帮助来解释我,我该怎么做? – user3859872 2014-11-14 12:29:32

+0

在你的'arc'类声明中声明一个成员函数:'virtual QRectF boundingRect()const;'并且添加适当的实现 – 2014-11-14 12:30:40

回答

1

其明显的,我们不能实例化抽象类中的错误消息。检查arc的定义,它必须具有纯虚函数,从它中取出一个类(具有所需的成员),并创建该类的对象。

+0

我已经添加了arc的.h文件与.h中我们可以看到的定义相同。你能帮我解决这个问题吗? – user3859872 2014-11-14 12:31:14

+0

你是否实现了'arc.cpp'? – Pickle 2014-11-14 12:33:26

+1

arc似乎没有纯虚函数,它可能在公共QObject或公共QGraphicsItem中。找到它并覆盖它 – 2014-11-14 12:34:20