Ошибка: не удается выделить объект

0

Я пытался сделать дугу, но получил следующую ошибку:

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

Не могли бы вы помочь мне решить проблему. Мой код выглядит следующим образом. Я получаю ошибку в классе cadgraphicsscene.cpp при событии mousepress.

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, а не только функцию paint
  • 0
    Извините, я не получил вас. Можете ли вы объяснить мне с помощью примера, что, как я могу это сделать?
Показать ещё 2 комментария
Теги:
qt
qgraphicsview
qgraphicsscene

1 ответ

1

Его очевидный, мы не можем создать экземпляр абстрактного класса, как в сообщении об ошибке. Проверьте определение дуги, он должен иметь чистую виртуальную функцию, высказать класс (с желаемыми членами) из него и сделать объект этого класса.

  • 0
    Я добавил .h файл дуги, дуга имеет то же определение, что и в .h, который мы видим. Можете ли вы помочь мне решить проблему.
  • 0
    Вы реализовали arc.cpp ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню