Qt - QPushButtons 代替 QTreeView 项目

Posted

技术标签:

【中文标题】Qt - QPushButtons 代替 QTreeView 项目【英文标题】:Qt - QPushButtons in place of QTreeView Items 【发布时间】:2010-11-23 17:12:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

祝你好运!

【讨论】:

以上是关于Qt - QPushButtons 代替 QTreeView 项目的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 从布局中删除所有小部件?

使用 PySide 在灵活的网格布局中布局 QPushButtons [重复]

在 Qt 中使用按钮堆叠小部件页面

QT QSlider 边距

Qt:如何在特定时间内冻结某些按钮?

Qt - 如何展开或折叠我的 QTableView