2010-11-23 31 views
0

Est-il possible d'ajouter QPushButtons pour chaque élément d'un QTreeView? Par exemple, lorsque vous cliquez sur un TreeItem (c'est un bouton), les enfants sont affichés en tant que boutons? J'ai juste un QTreeView standard.Qt - QPushButtons à la place de QTreeView Items

_layout = new QVBoxLayout(this); 

treeView = new QTreeView(this); 
QStandardItemModel* standardModel = new QStandardItemModel(); 
QStandardItem* rootMenu = standardModel->invisibleRootItem(); 

//populate TreeView 

treeView->setModel(standardModel); 
treeView->setWordWrap(true); 
treeView->setHeaderHidden(true); 

//treeView->expandAll(); 
_layout->addWidget(treeView); 

this->setLayout(_layout); 

Répondre

1

Je n'ai pas fait personnellement cette (encore), mais vous pouvez essayer d'utiliser QAbstractItemView :: setIndexWidget(). Les widgets ne seront en aucun cas connectés au modèle de données, c'est donc à votre code de les mettre à jour si nécessaire. En outre, vous devez l'appeler pour chaque QModelIndex séparément.

0

Voici la réponse. Vous devez créer votre propre délégué et l'appliquer pour votre QTreeView. Pour créer un délégué, vous devez sous-classer QStyledItemDelegate et ré-implémenter sa méthode QStyledItemDelegate::paint(...) de cette façon ce que vous voulez, n'oubliez pas de ré-implémenter la méthode QStyledItemDelegate::sizeHint(...) si nécessaire, bien sûr. En outre, vous devrez peut-être ré-implémenter la méthode QStyledItemDelegate::createEditor(...).

Pour appliquer délégué créé à votre vue (QTreeView), vous devez créer délégué et appeler la méthode de QTreeViewsetItemDelegate (ou setItemDelegateForColumn, ou setItemDelegateForRow).

Bonne chance!