質問

グラフィックビューフレームワークを使用してポリゴンを描画しています。これでシーンにポリゴンを追加しました:

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