2013-08-27 1 views
1

Je veux vérifier le texte d'une ligne dans QListView avant que l'utilisateur l'édite. Si cela ne correspond pas à un modèle, je ne veux pas l'accepter. Je possède actuellement un QListView et QStandardItemModel. Je peux facilement ajouter et supprimer des éléments via le QStandardItemModel. Je définis également le modèle de la vue en liste.QListView & QStandardItemModel vérifier le texte avant d'éditer la ligne

Y at-il une fonction delegates ou event (s) sur la liste ou le modèle pour l'édition?

+0

pourquoi vous ne pouvez pas le faire dans setData()? – 4pie0

+0

Que voulez-vous dire? – Niklas

+0

avez-vous surchargé les fonctions setData() et data() pour votre modèle? – 4pie0

Répondre

3

vous pouvez surcharger data() et setData() fonctions de QStandardItemModel, puis lorsque l'utilisateur tente de modifier l'article de votre setData sera appelé avec Qt::EditRole et là vous pouvez faire votre traitement.

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

+0

Savez-vous s'il est possible de surcharger 'appendRow'? – Niklas

+0

QStandardItemModel a appendRow fonction, ce n'est pas virtuel, voir une référence de classe http://qt-project.org/doc/qt-5.0/qtgui/qstandarditemmodel.html – 4pie0

+0

Donc je ne peux pas le contourner, non? – Niklas

0

Si je vous ai bien compris, vous voulez vérifier la valeur d'un article au moment où l'utilisateur tente de passer en mode d'édition?

L'utilisation d'un délégué devrait fonctionner pour ce assez bien:

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();' me donne 'QVariant (QString," asdfdsaf ")' mais pas la vraie chaîne 'asdfdsaf'. Comment puis-je obtenir les données brutes? – Niklas

+0

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

Questions connexes