是否可以为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);
答案 0 :(得分:1)
我还没有亲自完成此操作,但您可以尝试使用QAbstractItemView :: setIndexWidget()。窗口小部件不会以任何方式连接到数据模型,因此必要时由您的代码更新它们。此外,您需要分别为每个QModelIndex调用它。
答案 1 :(得分:0)
这是答案。您必须为QTreeView
创建自己的代理并为其设置。
要创建委托,您必须将QStyledItemDelegate子类化并以您想要的方式重新实现其QStyledItemDelegate::paint(...)
方法,当然,如果需要,也不要忘记重新实现QStyledItemDelegate::sizeHint(...)
方法,当然。
此外,您可能需要重新实施QStyledItemDelegate::createEditor(...)
方法。
要将创建的委托应用于您的视图(QTreeView
),您必须创建委托并调用QTreeView
的方法setItemDelegate
(或setItemDelegateForColumn
或setItemDelegateForRow
)。