Re[2]: TableView: сигнал об окончании редактирования
От: dimka  
Дата: 23.06.20 16:10
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Делайте свой делегат, переопределив один метод:

SaZ>http://doc.qt.io/qt-5/qitemdelegate.html#setModelData
SaZ>
SaZ>void MyItemDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
SaZ>{
SaZ>  emit MyMegaSignal( index );
SaZ>  return QItemDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index);
SaZ>}
SaZ>

SaZ>З.Ы. Igore
Автор: Igore
Дата: 01.02.16
более общий случай написал. Мой пример подходит именно для тех случаев, когда нужно кидать сигнал только при пользовательском вводе. Если данные менять программно, то у меня сигнал не кинется.


Некропостинг, да Но по теме. Сейчас разбираюсь с этой ша(р)манкой. И у меня вопрос. Что вы подразумеваете под программным изменением данных?

В моей программе данные это список, элементами которого являются структуры. tableView отображает через модель эти данные в виде таблицы, каждая строка — элемент списка. И реализован делегат, как вы рекомендовали.

Если я чисто программно добавляю элемент к списку между вызовами beginReset() endReset() для модели, то изменение данных в отображении происходит корректно, но ни setModelData() в делегате, ни setData() в модели не вызываются.
А если редактирую вручную данные в tableView, то вызываются и setModelData() в делегате, и setData() в модели.

Т.е. у меня получается, что и ваш вариант, и вариант Igore
Автор: Igore
Дата: 01.02.16
равносильны? (при условии, что имеем одно окошко tableView, один экземпляр делегата и один экземпляр модели)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.