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評価を超えてパフォーマンスに影響しますか?