QTableView: как сделать что-то на начало / конец редактирования? - PullRequest
4 голосов
/ 15 марта 2011

Есть ли какие-либо сигналы (я ничего не могу найти в документах), излучаемые, когда пользователь начинает и заканчивает редактирование ячейки виджета QTableView?

Я хочу выполнить некоторую функцию из табличной модели, а затем пользователь начинает редактировать enyячейка и выполнить другую функцию, когда пользователь заканчивает редактирование.Как я могу это сделать?

Ответы [ 4 ]

5 голосов
/ 15 марта 2011

Действия, когда пользователь начинает / заканчивает редактирование, могут быть выполнены путем реализации вашего собственного Delegate .

Также в QAbstractItemModel есть сигнал dataChanged .

1 голос
/ 07 сентября 2015

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

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

0 голосов
/ 27 августа 2011

Как показано выше в графите, я обычно использую dataChanged в своей модели, обычно QSqlTableModel, чтобы узнать, когда редактирование закончилось.Но я согласен, что имеет смысл иметь сигналы для более подробных действий пользователя в самом QTableView.

connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this,SLOT(updatePlot()));
0 голосов
/ 15 марта 2011

Я бы получил класс из QTableView и переопределил функцию selectionChanged для реализации определенного поведения, когда пользователь начинает редактировать ячейку, а также переопределил функцию dataChanged для реализации определенного поведения после того, как ячейка была изменена.

...