2010-06-27 8 views
1

Ce que j'essaie de faire est d'avoir une table qui ne semble pas éditable directement mais qui peut être éditée dans un widget en dehors de la table. C'est-à-dire que le nœud sélectionné peut être édité ici, et tous les nœuds utilisent le même éditeur parce que je veux qu'il soit toujours affiché.Qt: déléguer à un seul éditeur

Ce que j'ai essayé est de sous-classe QItemDelegate et juste retourner l'instance de QTextEdit je l'ai déjà, comme ceci:

class Delegate extends QItemDelegate { 
    @Override 
    public QWidget createEditor(QWidget parent, QStyleOptionViewItem option, QModelIndex index) { 
     return qtextEdit; 
    } 
} 

qui fonctionne, sauf que lorsque vous quittez l'éditeur, il est détruit. Peut-être que le délégué n'est pas censé être utilisé de cette façon. Alors, comment puis-je y parvenir?

(ps. Im en utilisant le code Jambi mais C++ est très bien)

+0

Avez-vous réimplémenter la fonction de membre closeEditor? Je pense que cette méthode est responsable de la suppression/suppression de l'éditeur –

+0

Il n'existe pas de méthode closeEditor. Il y a un signal closeEditor donc je ne pense pas que celui-ci a quelque chose à voir avec ça. Et sa finale de toute façon, donc ça ne peut pas être outrepassé. – takoi

+0

Je peux à peine comprendre Qt en Java. Je sais que c'est possible, mais il m'a fallu un * long * temps pour réaliser que c'était ce que c'était ... – ianmac45

Répondre

2

La classe QDataWidgetMapper est exactement ce que vous voulez, pour modifier les valeurs de tout dossier en dehors de la vue dans les contrôles externes.

Pris directement du documentation, voici comment utiliser cette fonctionnalité?:

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst(); 

Et, si vous avez une vue (QTreeView/QListView/QTableView/etc) et que vous souhaitez modifier actuellement sélectionné élément, connectez le signal approprié & emplacement: connect(&view, SIGNAL(activated(QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex)));

+0

Ouais que * est * exactement ce que je voulais. Merci!:) – takoi