0

QGraphicsScene::itemAt我已经在我实现的 QGraphicsScene 中编写了代码,以便从返回的内容中转换为自定义类。有趣的是,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我不知道的后果,例如丢失数据?提前感谢您的任何建议。

4

0 回答 0