Похоже, это связано с давней ошибкой в Qt (не могу найти номер), где сигнал dataChanged
НЕ запускает перерисовку, если ЕДИНСТВЕННАЯ вещь, которая изменилась на значке.Он не проверяет Qt::DecorationRole
, чтобы увидеть, изменилось ли оно.
Если вы вносите изменение из «представления», вы можете принудительно обновить ...
, но если имеется несколько представлений,это не изменит другие, только текущее.
Мое предложение, которое работает, и намного дешевле, чем сброс модели, и обновит все представления.
ОбернитеdataChanged
сигнал вызова, с layoutAboutToBeChanged()
и layoutChanged()
, например:
layoutAboutToBeChanged();
"call functionality that change the icon to be shown"
emit dataChanged( index, index ); // does nothing
layoutChanged(); // forces a repaint of visible data on all open views