Проблема с сигналом dataChanged заключается в том, что он также излучается при программном изменении данных (setData).Если программа вызывает setData (), и слот не должен запускаться, тогда единственное решение - действительно реализовать пользовательский делегат.
В QAbstractItemView есть виртуальные методы commitData и closeEditor, но они не берут индекскак параметр, и я не уверен на 100%, что currentIndex () всегда будет корректным ... (наверняка QAIV не полагается на это из-за постоянных редакторов, поэтому у него есть внутренний хэш).