QGraphicsScene 및 QGraphicsItem (items(), collidingItems(), childItems() 등)의 편의 기능 대부분이 QList를 반환하므로 많은 qgraphicsitem_cast 또는 static_cast 및 QGraphicsItem :: Type()은 장면에 다른 유형의 항목이 많이있을 때 실제 항목을 유지하기 위해 검사합니다. 나는 많은 서브 클래스 캐스트를하는 것이 바람직한 코딩 스타일이 아니라고 생각했지만,이 경우 다른 가능한 방법이 없다고 생각합니까?QGraphicsView 프레임 워크 및 성능에서 포인터 캐스트가 많습니다.
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 평가 이상의 성능에 영향을 미칩니 까?
+1 동일한 문제가 있습니다. 주목할 가치가있는 한 가지 점은 setData()/data() 메서드를 사용하여 각 QGraphicsItem에 임의의 데이터 (QVariant)를 저장하고 키로 데이터에 액세스 할 수 있다는 것입니다. 유용 할 수 있습니다. – Rob