我有一个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)));
不幸的是,这不是发生的事情,所以我做错了什么。如果有人能给我一个小费,我真的很感激。 我只是在这里放了一些代码来展示我做了什么,问你是否需要我发帖了。
提前致谢