【问题标题】:Error: Cannot allocate an object [duplicate]错误:无法分配对象[重复]
【发布时间】:2014-11-14 12:25:15
【问题描述】:

我试图做一个弧,但收到以下错误:

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

你能帮我解决这个错误吗?我的代码如下。在鼠标按下事件时,我在 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纯虚成员函数,而不仅仅是paint一个
  • 对不起,我没有得到你。你能用例子来解释我该怎么做吗?
  • arc 类声明中声明一个成员函数:virtual QRectF boundingRect() const; 并添加正确的实现
  • 谢谢它也帮我解决了错误:)

标签: c++ qt qgraphicsview qgraphicsscene


【解决方案1】:

很明显,我们不能像错误消息中那样实例化抽象类。查看 arc 的定义,它必须具有纯虚函数,从中派生一个类(具有所需的成员)并生成该类的对象。

【讨论】:

  • 我已经添加了 arc 的 .h 文件,arc 的定义与我们可以看到的 .h 中的定义相同。你能帮我解决这个问题吗?
  • 你实现arc.cpp了吗?
  • arc 似乎没有纯虚函数,它可能在 public QObject 或 public QGraphicsItem 中。找到它并覆盖它
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
相关资源
最近更新 更多