简体   繁体   English

Qt-QPushButtons代替QTreeView项目

[英]Qt - QPushButtons in place of QTreeView Items

Is it possible to add QPushButtons for every item in a QTreeView? 是否可以为QTreeView中的每个项目添加QPushButtons? For instance, when you click on a TreeItem (that is a button), it's children get displayed as buttons as well? 例如,当您单击TreeItem(即按钮)时,其子级也会显示为按钮吗? I just have a standard QTreeView. 我只有一个标准的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);

I have not personally done this (yet), but you could try using QAbstractItemView::setIndexWidget(). 我还没有亲自完成此操作,但是您可以尝试使用QAbstractItemView :: setIndexWidget()。 The widgets won't aren't connected in any way to the data model, so it is up to your code to update them if necessary. 窗口小部件不会以任何方式连接到数据模型,因此取决于代码是否需要更新它们。 Also, you need to call it for each QModelIndex separately. 另外,您需要分别为每个QModelIndex调用它。

Here is the answer. 这是答案。 You must create your own delegate and applay it for your QTreeView . 您必须创建自己的委托并将其应用于QTreeView To create delegate you must subclass QStyledItemDelegate and re-implement its QStyledItemDelegate::paint(...) method in that way what you want, also, don't forget about re-implementing QStyledItemDelegate::sizeHint(...) method if needed, of course. 要创建委托,您必须子类化QStyledItemDelegate并以您想要的方式重新实现其QStyledItemDelegate::paint(...)方法,并且,如果发生以下情况,请不要忘记重新实现QStyledItemDelegate::sizeHint(...)方法当然需要。 Also, you may need to re-implement QStyledItemDelegate::createEditor(...) method. 另外,您可能需要重新实现QStyledItemDelegate::createEditor(...)方法。

To apply created delegate to your view ( QTreeView ) you must create delegate and call QTreeView 's method setItemDelegate (or setItemDelegateForColumn , or setItemDelegateForRow ). 要将创建的委托应用于视图( QTreeView ),必须创建委托并调用QTreeView的方法setItemDelegate (或setItemDelegateForColumnsetItemDelegateForRow )。

Good luck! 祝好运!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM