2014-11-14 64 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