Вопрос

Я рисую многоугольники с помощью рамки графики. Я добавил многоугольник на сцену с этим:

QGraphicsPolygonItem *poly = scene->addPolygon(QPolygonF(vector_of_QPointF));
poly->setPos(some_point);

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

#include <QGraphicsPolygonItem>

class GridHex : public QGraphicsPolygonItem
{
public:
    GridHex(QGraphicsItem* parent = 0);
};

GridHex::GridHex(QGraphicsItem* parent) : QGraphicsPolygonItem(parent)
{
}

До сих пор не делай много с этим классом, как вы можете видеть. Но не следует заменять QGraphicsPolyGonItem с моим классом Gridhex? Это бросает «Неверное преобразование от« QGraphicsPolyGonitem * »на ошибку« Gridhex * »:

GridHex* poly = scene->addPolygon(QPolygonF(vector_of_QPointF));

Что я делаю неправильно?

Это было полезно?

Решение

Я предполагаю, что addpolygon возвращает qgraphicspolygonitem, который является базовым классом вашей специализации. Вам понадобится динамичный листок, поскольку вы можете безопасно сделать преобразование, идущая вверх по наследственности, а не вниз.

GridHex* poly = dynamic_cast<GridHex*>(scene->addPolygon(QPolygonF(vector_of_QPointF)));
if (poly != NULL) {
    // You have a gridhex!
}

РЕДАКТИРОВАТЬ: Пока мой ответ помогает с вашей проблемой конвертации, как вы можете гарантировать, что сцена создает ваши объекты Gridhex? Вы планируете подкласс на объекте сцены, чтобы вернуть свои объекты Gridhex?

Ваш подкласс QGraphicsScene переопределял бы AddPolygon, чтобы сделать что-то вроде:

// Call the base class
QGraphicsPolygonItem* result = QGraphicsScene::addPolygon(vectorOfPoints);
// Return your stuff
return new GridHex(result);

Другие советы

Как правило, это не хорошая идея для указателя полученного класса, чтобы указать родителю, из-за «нарезки». Я предлагаю вам сделать это вместо

GridHex* hex = new GridHex(scene);
scene->addItem(hex);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top