我試圖讓一個弧形,但得到以下錯誤:錯誤:無法分配一個對象
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;
};
你需要重寫[boundingRect](http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#boundingRect)純虛擬成員函數,不僅僅是'paint'一個 – 2014-11-14 12:27:00
對不起沒有得到你。你能用例子的幫助來解釋我,我該怎麼做? – user3859872 2014-11-14 12:29:32
在你的'arc'類聲明中聲明一個成員函數:'virtual QRectF boundingRect()const;'並且添加適當的實現 – 2014-11-14 12:30:40