我正在使用Graphics View框架绘制多边形。我在场景中添加了一个多边形:
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)
{
}
到目前为止,对于该课程没有做太多,正如你所看到的那样。但是不应该用我的GridHex类替换QGraphicsPolygonItem吗?这会导致“从'QGraphicsPolygonItem *'到'GridHex *'的无效转换”错误:
GridHex* poly = scene->addPolygon(QPolygonF(vector_of_QPointF));
我做错了什么?
答案 0 :(得分:1)
通常,由于“切片”,派生类的指针指向父级并不是一个好主意。我建议你这样做
GridHex* hex = new GridHex(scene);
scene->addItem(hex);
答案 1 :(得分:0)
我在猜测scene-&gt; 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);