0

是否可以为 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);
4

2 回答 2

1

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

于 2010-12-11T11:13:09.053 回答
0

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

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

祝你好运!

于 2012-11-22T18:57:04.527 回答