On Wed, Jan 20, 2016 at 2:13 AM, Stephen Kelly <stephen.ke...@ableton.com>
wrote:
>
>
>  https://bugreports.qt.io/browse/QTBUG-50542
>
> The remove animation happens as a result of the
> QAbstractItemModel::rowsRemoved signal, so there is a 'tension' between the
> requirements:
>
>    1. An attempt in the delegate to access the data while it fades out.
>    2. The row in the model providing access to that data has just been
>    removed.
>
> The solution could be to cache data retrieved from the model.
>

That's a more complex solution than you might think.  It's a pretty popular
pattern to populate a model with QObjects for example and with a naive
cache of QVariants what was an admittedly annoying binding evaluation error
becomes a much more severe dereference of a dangling pointer.

And there are the obvious runtime costs to building and maintaining a cache
that is of little or no use to most people most of the time, which is I
think a strong argument for it being an off by default feature if
implemented.

If you do have this problem, right now the solution is to bind the model
value to a property in your delegate and use the property in your binding.
The property binding will only be re-evaluated when the model data changes
so it won't ever try and access the model after the row has been removed.

It is an issue and by all means investigate a solution, but there is a
simple means to deal with it at a user level and I'm personally wary of the
complexity and repercussions of fixing it in the views.


Andrew
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to