недопустимое новое выражение абстрактного класса: QGraphicsItem - PullRequest
0 голосов
/ 21 апреля 2020

Я определил класс с именем «Корабль», который наследует QGraphicsItem. Я попытался создать экземпляр класса Ship в другом классе с именем MarineTrafficSimulator в методе "drawShip". Я еще не использовал ни один из не реализованных методов QGraphicsItem, но я не могу понять, почему это делает класс Ship абстрактным классом и вызывает ошибку «недопустимое новое выражение абстрактного класса».

Это мой заголовок класса Ship :

    #ifndef SHIP_H
#define SHIP_H

#include <QGraphicsItem>
#include <QGraphicsScene>

class Ship : public QGraphicsItem
{
public:
    Ship();
    QPolygon shape;
};

#endif // SHIP_H

и класс корабля cpp:

#include "ship.h"

Ship::Ship()
{
    shape = QPolygon();
    shape.setPoints(5, -10,-10, -10,10, 20,10, 30,0, 20,-10);

}

и класс, в котором я пытаюсь создать экземпляр корабля, и я получаю ошибку:

#include "marinetrafficsimulator.h"
#include "ui_marinetrafficsimulator.h"

MarineTrafficSimulator::MarineTrafficSimulator(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MarineTrafficSimulator)
{
    scene = new QGraphicsScene(this);
    ui->setupUi(this);
    ui->simulate->setText("Simulate");
    ui->graphicsView->setScene(scene);
}

void MarineTrafficSimulator::drawShip()
{
    QBrush greenBrush(Qt::green);
    QPen whitePen(Qt::white);
    ship = new Ship(); // The line that is causing the error
//    scene->addPolygon(ship->shape,whitePen,greenBrush);
//    scene->addRect(0,0,10,10,whitePen,greenBrush);
}

MarineTrafficSimulator::~MarineTrafficSimulator()
{
    delete ui;
}
...