【问题标题】:Getting a QTreeWidgetItem List again from QTreeWidget再次从 QTreeWidget 获取 QTreeWidgetItem 列表
【发布时间】:2012-04-03 02:08:50
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: c++ qt checkbox qtreewidget


    【解决方案1】:

    由于您处理的是树,API 旨在让您访问树结构中的QTreeWidgetItems。因此,没有直接的方法可以直接通过 Qt 的 API 访问每个 QTreeWidgetItem。但是,有两种方法可以做到这一点:

    1)如果您的所有项目(或您关心的所有项目)都是“顶级”,那么您可以执行以下操作:

    for( int i = 0; i < tree->topLevelItemCount(); ++i )
    {
       QTreeWidgetItem *item = tree->topLevelItem( i );
    
       // Do something with item ...
    }
    

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

    doStuffWithEveryItemInMyTree( tree->invisibleRootItem() );
    
    void doStuffWithEveryItemInMyTree( QTreeWidgetItem *item )
    {
        // Do something with item ...
    
        for( int i = 0; i < item->childCount(); ++i )
            doStuffWithEveryItemInMyTree( item->child(i) );
    }
    

    【讨论】:

    • 谢谢,这肯定会帮助我。我现在无法测试它,但我阅读了您使用的方法文档,它非常有意义。谢谢
    【解决方案2】:

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

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

    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
    

    【讨论】:

      【解决方案3】:

      如果你想获取 QTreeWidget 中所有 QTreeWidgetItem 的列表,你可以这样做

      QList<QTreeWidgetItem *> items = ui->treeWidget->findItems(
                  QString("*"), Qt::MatchWrap | Qt::MatchWildcard | Qt::MatchRecursive);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多