我已经在我实现的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
是否有任何后果,例如丢失数据,我不知道?提前感谢任何建议。