- Mark 27 overriding functions with 'override' across GraphicsItemGroup,
GraphicsRectItem, and GraphicPolygonItem headers
- Add virtual destructor to IPropertyHandleImpl (fixes -Wdelete-abstract-non-virtual-dtor)
- Build is now 0 warnings, 0 errors
Move per-type serialization logic out of Document's monolithic
serializeItem()/deserializeItem() into each item class:
- Add virtual serialize() to AbstractShapeType template, overridden by
GraphicsRectItem, GraphicPolygonItem, and GraphicsItemGroup
- Add static createFromJson() factory + self-registration to each item
- Extract shared pen/brush/common helpers into serializationUtils
- Add type registry (serializationRegistry) for factory-based deserialization
- Document::saveAs()/load() now delegate to item->serialize() and
createItemFromJson() — no longer owns per-type dispatch
- Adding a new shape type no longer requires touching Document