Поскольку большинство вспомогательных функций 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?