1

我有一个 QTableView,它从自定义模型中获取数据,并使用自定义委托对其进行编辑。

//...
view->setModel(stockModel);
view->setItemDelegateForColumn(0, nameDelegate);

当用户编辑特定单元格时,它会键入一些文本(对象的名称),并且该文本可以被程序接受或不接受(程序不希望有重复的名称)。

我的解决方案是让自定义委托有一个信号:notValidText(QModelIndex) 并使用信号/插槽机制将信号连接到 tableview 编辑(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)));

不幸的是,这不是发生的事情,所以我做错了什么。如果有人能给我小费,我将不胜感激。我只是在这里放了一些代码来显示我做了什么,请问您是否需要我再发帖。

提前致谢

4

0 回答 0