I have a QTableView that obtains the data from a custom model and it's edited using a custom delegate.
//...
view->setModel(stockModel);
view->setItemDelegateForColumn(0, nameDelegate);
When the user edits a specific cell it types some text (name for an object) and this text could be accepted by the program or not (the program doesn't want to have repeated names).
My solution for this was to the custom delegate to have a signal: notValidText(QModelIndex) and use the signal/slot mechanism to connect the signal to the tableview edit(QModelIndex) slot. This, from what i know, should reedit the cell in question:
//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)));
Unfortunately this is not what happens, so i'm doing something wrong. If someone could give me a tip i would really appreciate. I just put here some code to show what i did, ask if you need me to post anymore.
Thanks in advance