首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >再次从QTreeWidget获取QTreeWidgetItem列表

再次从QTreeWidget获取QTreeWidgetItem列表
EN

Stack Overflow用户
提问于 2012-04-03 10:08:50
回答 3查看 23.8K关注 0票数 10

我该怎么做?实际上,我的主要目标是获得QTreeWidget中的哪个复选框被选中。但如果你们能帮我解决这个问题我就能做到。好吧,我找不到一个方法可以再次给我提供QList<QTreeWidgetItem *>,所以我可以遍历整个列表,检查是否选中了复选框(奇怪的句子,是吧?)。QTreeWidget::selectedItems()不会做我想做的事情。它实际获取所选的项(可以只是一个。所以我不知道itemS在这里是什么意思。不管怎样,我可能错了)。

我现在的主要目标是:通过QTreeWidget,能够对其中的项做任何我想做的事情。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-03 10:20:38

由于您处理的是树,因此该应用编程接口旨在让您能够访问树形结构中的QTreeWidgetItem。因此,没有直接的方法可以直接通过Qt的QTreeWidgetItem访问每一个单独的API。但是,有两种方法可以做到这一点:

1)如果你的所有项目(或你关心的所有项目)都是“顶级”的,那么你可以这样做:

代码语言:javascript
复制
for( int i = 0; i < tree->topLevelItemCount(); ++i )
{
   QTreeWidgetItem *item = tree->topLevelItem( i );

   // Do something with item ...
}

2)如果您需要访问树中的每个项目,以及该项目的子项,那么递归方法可能是正确的:

代码语言:javascript
复制
doStuffWithEveryItemInMyTree( tree->invisibleRootItem() );

void doStuffWithEveryItemInMyTree( QTreeWidgetItem *item )
{
    // Do something with item ...

    for( int i = 0; i < item->childCount(); ++i )
        doStuffWithEveryItemInMyTree( item->child(i) );
}
票数 27
EN

Stack Overflow用户

发布于 2015-01-25 17:25:40

下面的代码是用Python语言编写的,但是可以很容易地转换成C++。我遇到了与问题中描述的完全相同的问题,但我使用的是PySide (Python Qt binding)。

如果您想获得给定项目下所有QTreeWidgetItem的列表(包括该项目本身),请使用第一个函数。要获取树中所有QTreeWidgetItem的列表,请调用第二个函数。

代码语言:javascript
复制
def get_subtree_nodes(tree_widget_item):
    """Returns all QTreeWidgetItems in the subtree rooted at the given node."""
    nodes = []
    nodes.append(tree_widget_item)
    for i in range(tree_widget_item.childCount()):
        nodes.extend(get_subtree_nodes(tree_widget_item.child(i)))
    return nodes

def get_all_items(tree_widget):
    """Returns all QTreeWidgetItems in the given QTreeWidget."""
    all_items = []
    for i in range(tree_widget.topLevelItemCount()):
        top_item = tree_widget.topLevelItem(i)
        all_items.extend(get_subtree_nodes(top_item))
    return all_items
票数 9
EN

Stack Overflow用户

发布于 2017-11-30 00:32:28

如果想要获得QTreeWidget中所有QTreeWidgetItem的列表,可以执行

代码语言:javascript
复制
QList<QTreeWidgetItem *> items = ui->treeWidget->findItems(
            QString("*"), Qt::MatchWrap | Qt::MatchWildcard | Qt::MatchRecursive);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9986231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档