在QGraphicsPolygonItem上使用qt qgraphicsitem强制转换失败

时间:2013-06-13 14:43:47

标签: c++ qt qgraphicsview

我已经在我实现的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是一个QGraphicsPolygonItem,而不是QGraphicsItem:

VModule::VModule(QGraphicsItem *parent = 0) : QGraphicsPolygonItem(parent)
{
    // ...
}

这是VModule中的类型实现:

int type() const { return TypeVModuleItem; }

这是否与演员的失败有关?以这种方式使用dynamic_cast是否有任何后果,例如丢失数据,我不知道?提前感谢任何建议。

0 个答案:

没有答案