0

実装された 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この方法で使用すると、データの損失など、私が気付いていない影響はありますか? アドバイスをよろしくお願いします。

4

0 に答える 0