Qt6 topics merged with General

Differences between qgraphicsitem_cast and dynamic_cast

  • Is there any reason for using qgraphicsitem_cast instead of dynamic_cast for recognizing sublass of QGraphicsItem?

    qgraphicsitem_cast requires implementing "type()" method, and dynamic_cast doesn't require that (so dynamic_cast is simpler to use from my point of view), but is there any drawbacks to using dynamic_cast?

    That's how I'm recognizing subclasses currently:

    for (QGraphicsItem *item : childItems()) // (childItems of some parent GraphicsItem)
            if (SubclassGraphicsItem *sub_item = dynamic_cast<SubclassGraphicsItem *>(item))
                    //use sub_item

    Is there some benefits to using qgraphicsitem_cast that will make it worth to implement "type()" method for each of the QGraphicsItem subclasses?

  • Moderators

    qgraphicsitem_cast basically does if (item->type() == T::Type) return static_cast<T>(item) so potentially a lot faster than dynamic_cast, which needs to do runtime RTTI traversal.

    If you do that check often it's definitely worth it.

Log in to reply