Повторное редактирование ячейки QTableView, когда данное значение недопустимо
У меня есть QTableView, который получает данные из пользовательской модели, и она редактируется с использованием пользовательского делегата.
//...
view->setModel(stockModel);
view->setItemDelegateForColumn(0, nameDelegate);
Когда пользователь редактирует определенную ячейку, он вводит некоторый текст (имя для объекта), и этот текст может быть принят программой или нет (программа не хочет иметь повторяющиеся имена).
Мое решение для этого состояло в том, чтобы пользовательский делегат имел сигнал: notValidText(QModelIndex) и использовал механизм сигнал / слот для подключения сигнала к слоту редактирования табличного представления (QModelIndex). Это, насколько я знаю, должно заново отредактировать данную клетку:
//implementation of the delegate
void NameDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index)
{
QLineEdit *line = static_cast<QLineEdit*>(editor);
if(!model->setData(index, line->text(), Qt::EditRole))
{
emit notValidData(index);
}
}
//connection of the view with the delegate
connect(nameDelegate, SIGNAL(notValidData(QModelIndex)), view, SLOT(edit(QModelIndex)));
К сожалению, этого не происходит, поэтому я делаю что-то не так. Если бы кто-то мог дать мне совет, я был бы очень признателен. Я просто поместил здесь некоторый код, чтобы показать, что я сделал, спросить, нужно ли мне больше публиковать.
заранее спасибо