2013-08-27 6 views
1

Я хочу проверить текст строки в QListView перед тем, как пользователь ее редактирует. Если это не соответствует шаблону, я не хочу его принимать.QListView & QStandardItemModel проверить текст перед редактированием строки

В настоящее время у меня есть QListView и QStandardItemModel. Я могу легко добавлять и удалять элементы через QStandardItemModel. Я также задал модель представления списка.

Естьили event функции (-ий) в списке или модель для редактирования?

+0

, почему вы не можете сделать это в УстановитьДанные()? – 4pie0

+0

Что это значит? – Niklas

+0

Вы перегрузили функции setData() и data() для своей модели? – 4pie0

ответ

3

вы можете перегрузить data() и setData() функции от QStandardItemModel, а затем, когда пользователь пытается изменить предмета вашего setData будет вызываться с Qt::EditRole и там вы можете сделать ваша обработка.

http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#setData

+0

Знаете ли вы, можно ли переопределить 'appendRow'? – Niklas

+0

QStandardItemModel имеет функцию appendRow, он не является виртуальным, см. Ссылку на класс http://qt-project.org/doc/qt-5.0/qtgui/qstandarditemmodel.html – 4pie0

+0

Так что я не могу переопределить его, не так ли? – Niklas

0

Если я правильно вас понимаю, вы хотите проверить значение элемента в момент, когда пользователь попытается войти в режим редактирования?

Использование делегата должны работать для этого достаточно хорошо:

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()); 
+0

'qDebug() << index.data(). ToString();' дает мне QVariant (QString, "asdfdsaf") ', но не настоящую строку' asdfdsaf'. Как я могу получить необработанные данные. – Niklas

+0

QString s = index.data(). ToString(); – 4pie0

 Смежные вопросы

  • Нет связанных вопросов^_^