2D: Avoid needless full rebuilds in QXYModelMapper


QXYModelMapperPrivate::initializeXYFromModel() clears the series and
refills it from the model. It was reached more often than necessary:

- modelReset and layoutChanged were connected straight to it, bypassing
  m_modelSignalsBlock. A model that emits either from insertRows() or
  removeRows() therefore rebuilt the whole series on every series edit
  the mapper wrote back to it. Route both through onModelReset(), which
  honors the block flag like the other model slots.
- Every property setter reinitialized and emitted its changed signal
  even when the value was unchanged. Return early in that case, also for
  setModel() and setSeries() with the current pointer.
- initializeXYFromModel() now builds the new point list first and leaves
  the series untouched if it already matches, and reserves the list.

Add tests covering series edits with a reset-emitting model, external
resets, unchanged resets and unchanged setters.

Pick-to: 6.12
Task-number: QTBUG-151152
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Change-Id: I83260033c4b39d1a68e5e9fe067ec55aeb662741
Reviewed-by: Tomi Korpipaa <tomi.korpipaa@qt.io>
commit1c7e8cacaced15db99c890a2f78599fb58b3c234
parentf2694c3849af95bc0e9a8c3e527a43fbfa8e7580
authorSami Varanka <sami.varanka@qt.io>
committerSami Varanka <sami.varanka@qt.io>
commit timeTue, 13 Oct 2026 06:48:57 +0000