【问题标题】:Qt - QPushButtons in place of QTreeView ItemsQt - QPushButtons 代替 QTreeView 项目
【发布时间】: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);

【问题讨论】:

    标签: c++ qt qt4 qtreeview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多