由于 QGraphicsScene 和 QGraphicsItem 的大多数便利功能(例如 items()、collidingItems()、childItems() 等)返回一个 QList,你不得不做很多 qgraphicsitem_cast 或 static_cast 和 QGraphicsItem::Type() 检查当场景中有很多不同类型的物品时,请掌握实际物品。我认为做很多子类转换不是一种理想的编码风格,但我想在这种情况下没有其他可行的方法,或者有吗?
QList<QGraphicsItem *> itemsHit = someItem->collidingItems(Qt::IntersectsItemShape);
foreach (QGraphicsItem *item, itemsHit) {
if (item->type() == QGraphicsEllipseItem::type()) {
QGraphicsEllipseItem *ellipse = qgraphicsitem_cast<QGraphicsEllipseItem *>(item);
// do something
}
else if (item->type() == MyItemSubclass::type()) {
MyItemSubClass *myItem = qgraphicsitem_cast<MyItemSubClass *>(item);
// do something
}
// etc
}
上面的 qgraphicsitem_cast 可以用 static_cast 代替,因为正确的类型已经被验证。当一直在做很多这些(非常动态的场景)时,大量的演员会影响性能超出正常的 if-else 评估吗?