2010-11-23 14 views
0

Ist es möglich, QPushButtons für jedes Element in einem QTreeView hinzuzufügen? Zum Beispiel, wenn Sie auf ein TreeItem klicken (das ist eine Schaltfläche), werden Kinder auch als Schaltflächen angezeigt? Ich habe nur ein Standard-QTreeView.Qt - QPushButtons anstelle von QTreeView Elemente

_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); 

Antwort

1

habe ich nicht persönlich getan (noch) nicht, aber man könnte versuchen QAbstractItemView :: setIndexWidget() verwenden. Die Widgets sind in keiner Weise mit dem Datenmodell verbunden. Daher ist es an Ihrem Code, diese bei Bedarf zu aktualisieren. Außerdem müssen Sie sie für jeden QModelIndex separat aufrufen.

0

Hier ist die Antwort. Sie müssen Ihren eigenen Delegierten erstellen und ihn für Ihre QTreeView verwenden. Um Delegat zu erstellen, müssen Sie QStyledItemDelegate Unterklasse QStyledItemDelegate::paint(...) Methode auf diese Weise re-implementieren, was Sie wollen, auch nicht vergessen, wieder zu implementieren QStyledItemDelegate::sizeHint(...) Methode, wenn nötig, natürlich. Möglicherweise müssen Sie auch die Methode QStyledItemDelegate::createEditor(...) erneut implementieren.

Um erstellt Delegierten zu Ihrer Ansicht anwenden (QTreeView) Sie Delegaten müssen und rufen QTreeView ‚s Methode setItemDelegate (oder setItemDelegateForColumn oder setItemDelegateForRow).

Viel Glück!

Verwandte Themen