Qt - QPushButtons代替QTreeView项目

时间:2010-11-23 17:12:49

标签: c++ qt qt4 qtreeview

是否可以为QTreeView中的每个项目添加QPushButtons?例如,当您单击TreeItem(即一个按钮)时,它的子项也会显示为按钮?我只有一个标准的QTreeView。

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

2 个答案:

答案 0 :(得分:1)

我还没有亲自完成此操作,但您可以尝试使用QAbstractItemView :: setIndexWidget()。窗口小部件不会以任何方式连接到数据模型,因此必要时由您的代码更新它们。此外,您需要分别为每个QModelIndex调用它。

答案 1 :(得分:0)

这是答案。您必须为QTreeView创建自己的代理并为其设置。 要创建委托,您必须将QStyledItemDelegate子类化并以您想要的方式重新实现其QStyledItemDelegate::paint(...)方法,当然,如果需要,也不要忘记重新实现QStyledItemDelegate::sizeHint(...)方法,当然。 此外,您可能需要重新实施QStyledItemDelegate::createEditor(...)方法。

要将创建的委托应用于您的视图(QTreeView),您必须创建委托并调用QTreeView的方法setItemDelegate(或setItemDelegateForColumnsetItemDelegateForRow )。

祝你好运!