2010-12-01 3 views
0

J'utilise un QAbstractItemView pour manipuler une file d'attente. Le problème est que l'éditeur ne ferme pas et ne met pas à jour la valeur dans le modèle lorsque l'utilisateur appuie sur le bouton d'envoi. Cela provoque une certaine frustration.Fermeture des éditeurs de QAbstractItemView

J'ai parcouru les documents Qt, mais je n'arrive pas à trouver un moyen simple de fermer l'éditeur et de valider les changements. Comment dois-je m'y prendre?

Répondre

0

On dirait que vous devez suivre l'élément actuellement ouvert à travers le modèle de sélection ou les signaux de ItemView ou currentIndex(), lorsque vous avez QModelIndex de l'élément qui est ouvert actuellement, vous devriez être en mesure de fermer à l'aide closePersistentEditor (const QModelIndex & index)

+0

Je pense que closePersistentEditor ne fonctionnera que si vous avez utilisé openPersistentEditor pour créer un éditeur, mais je vais essayer. – dirk

1

C'est ce que je

void ProjectExplorerView::CloseCurrentEditorIfOpen(bool commit) 
{ 
    QWidget* w = indexWidget(currentIndex()); 
    if (w != nullptr) 
    { 
    if (commit) { 
     commitData(w); 
     closeEditor(w, QAbstractItemDelegate::SubmitModelCache); 
    } else { 
     closeEditor(w, QAbstractItemDelegate::RevertModelCache); 
    } 
    } 
} 
+0

BTW Je pense que le commitData() est redondant. – gremwell

+0

Le 'commitData' n'est pas redondant. L'omettre ferme l'éditeur sans que les données ne soient validées. –

+0

l'indicateur 'QAbstractItemDelegate :: SubmitModelCache' dans' closeEditor' est censé soumettre ala commitData AFAIK. Par conséquent, il est redondant de l'appeler avant la main .... sauf si vous avez des connaissances de première main autrement? – gremwell