Это сводит меня с ума. У меня есть QAbstractItemModel, QSortFilterProxyModel и QStyledItemDelegate. Все подклассы. После выдачи следующего dataChanged() следует вызывать QStyledItemDelegate::paint() только для этих двух индексов (0,0 и 0,1). Однако я подтвердил, что он вызывается для всех видимых ячеек.
void my_model_t::emit_data_changed()
{
QModelIndex start_ix = createIndex( 0, 0 );
QModelIndex end_ix = createIndex( 0, 1 );
emit( dataChanged( start_ix, end_ix ) );
}
Чтобы быть уверенным, я подключил слот к сигналам модели и прокси modelReset() и layoutChanged(). Он выполняет простую функцию printf(). Однако никогда не вызывается. Я почти уверен, что не делаю ничего странного с представлением или делегатом. Но и не совсем уверен, где искать.