Я хочу проверить текст строки в QListView
до того, как пользователь его редактирует. Если это не соответствует шаблону, я не хочу принимать это.
В настоящее время у меня есть QListView
а также QStandardItemModel
, Я могу легко добавлять и удалять элементы через QStandardItemModel
, Я также установил модель представления списка.
Есть ли некоторые delegates
или же event
функция (и) в списке или модель для редактирования?
вы можете перегрузить data()
а также setData()
функции от QStandardItemModel
Затем, когда пользователь пытается изменить элемент вашего setData
будет вызван с Qt::EditRole
и там вы можете сделать свою обработку.
http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#setData
Если я вас правильно понимаю, вы хотите проверить значение элемента в то время, когда пользователь пытается войти в режим редактирования?
Использование делегата должно работать для этого довольно хорошо:
class MyItemDelegate : public QItemDelegate {
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
if(index.data() == /* do whatever check you want here */) {
return NULL; // Prevent editing
}
return QItemDelegate::createEditor(parent, option, index);
}
};
listView->setItemDelegate(new MyItemDelegate());