No idea what your AnimalModel is and where it comes from, but it looks to me like you are changing your underlying data structure (m_animals) and then tell the view that the model has changed. But you never update the model (or tell the model that the underlying data has changed).

Sorry, that was a very confusing response from me...
Now that I see the code, I realise there's nothing wrong with your code, except for one tiny problem, and that is that when you emit dataChanged the second argument is out-of-range. It should be:
@emit dataChanged(index(0), index(m_animals.count() - 1));@
But that will invalidate the entire model, so really, you should just do:
@emit dataChanged(index(number), index(number));@