Search code examples
qt4

How can I force Qt to call `data()` on my model?


I've got a QtTreeView and a class Foo derived from QAbstractItemModel attached to it.

In Foo::data I set the Qt::BackgroundRole for each element of the tree according to the status of some internal data.

When I receive a signal to update my internal data I would like to update the background of each item accordingly, but I can't seem to reliably make Qt call my Foo::data method.

I've tried calling update() and repaint() (on the view), to no avail. Calling reset() works but I lose all the state of the tree (e.g. expanded elements etc.). Calling setData() on each element also works but the code gets a bit awkward as I have to explicitly rebuild the tree of data displayed which is not nice.

How can I force Qt to call data() on my model?


Solution

  • You need to inform the view class your model has changed, by emitting the dataChanged signal.