Повторное редактирование ячейки 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)));

К сожалению, этого не происходит, поэтому я делаю что-то не так. Если бы кто-то мог дать мне совет, я был бы очень признателен. Я просто поместил здесь некоторый код, чтобы показать, что я сделал, спросить, нужно ли мне больше публиковать.

заранее спасибо

0 ответов

Другие вопросы по тегам