実装された QGraphicsScene にコードを記述して、QGraphicsScene::itemAt
戻り値からカスタム クラスにキャストしました。興味深いことに、qgraphicsitem_cast
常にゼロを返しますが、使用しても問題なくdynamic_cast
動作します。どうしてこれなの?
void VScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// ...
QGraphicsItem *item = itemAt(event->scenePos(), QTransform());
if (item->type() == TypeVModuleItem) {
// This returns 0
VModule *module = qgraphicsitem_cast<VModule *>(item);
// This works
module = dynamic_cast<VModule *>(item);
// ...
}
}
VModule は QGraphicsItem ではなく、QGraphicsPolygonItem であることに注意してください。
VModule::VModule(QGraphicsItem *parent = 0) : QGraphicsPolygonItem(parent)
{
// ...
}
VModule での型の実装は次のとおりです。
int type() const { return TypeVModuleItem; }
これはキャストの失敗に関係がありますか?dynamic_cast
この方法で使用すると、データの損失など、私が気付いていない影響はありますか? アドバイスをよろしくお願いします。