I didn't say setData() should be called directly, but only that it could be called directly (by someone), since it is a public part of your model's api. And if someone should do that, you need to emit dataChanged() there - otherwise the view's won't reflect the change if made (only) via setData().
HTH
Bookmarks