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
我不知道的后果,例如丢失数据?提前感谢您的任何建议。