@peter.thompson You may be able to leverage the following fact into a workaround for your situation.
I can state from experience that calling these one after the other ("on the same line", as it were) will trigger the signal you probably want/need to have emitted from the (I believe it is modelUpdated, but don't quote me 😉)
beginResetModel(); endResetModel();
(of course they don't literally need to be on one line. I'm just emphasizing that you can call them back-to-back, without having changes to the data happen in between, and the result will be that the model "updates" at this time, as far as other watcher objects are concerned)
beginResetModel();
endResetModel();
... is also fine.
I have done this in several applications, and at the time I also looked inside the Qt source code to convince myself that it indeed does do what I intend. My use case was not the case that you describe. Rather, I simply had a "complex", many-nested-if-statement logic for selecting which rows were updated in any given case, and I didn't want to add more complexity trying to meticulously piece together what arguments to pass to dataChanged, so I found I could just do this "hack" at the appropriate point, to signal to the relevant QML to repaint "the whole model" (the visual UI representation thereof, more accurately).