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 项目的主要内容,如果未能解决你的问题,请参考以下文章