【问题标题】:Recursively expand all child items of item in QTreeView递归展开QTreeView中item的所有子项
【发布时间】:2015-03-12 18:07:33
【问题描述】:

我有一个 QTreeView,我想展开最近展开的项的所有子项。

我尝试使用 .expandAll(),但它也扩展了所有其他项目。

我很难获得最后扩展的项目的 ModelIndex,如果我有它,我可以递归地扩展它的子项。

我该怎么做?

【问题讨论】:

    标签: qt pyqt pyside qtreeview


    【解决方案1】:

    要扩展给定节点下方的所有节点,我会以以下方式递归执行 (C++):

    void expandChildren(const QModelIndex &index, QTreeView *view)
    {
        if (!index.isValid()) {
            return;
        }
    
        int childCount = index.model()->rowCount(index);
        for (int i = 0; i < childCount; i++) {
            const QModelIndex &child = index.child(i, 0);
            // Recursively call the function for each child node.
            expandChildren(child, view);
        }
    
        if (!view->expanded(index)) {
            view->expand(index);
        }
    }
    

    【讨论】:

    • 但是如何获得初始的 QModelIndex?
    • @f.rodrigues,使用型号是什么?你需要如何扩展它?通过点击一个节点?
    • @f.rodrigues 让动画工作可能值得另一个关于 SO 的问题。我有一个想法,但很长时间才能在另一个答案的 cmets 中发布。
    • 不应该是view-&gt;isExpanded(Qt 5.6)吗,你真的认为调用它比调用expand更有效率吗?
    • @DaRich, expand 已经针对树项目展开的情况进行了优化。所以检查是没有必要的。
    【解决方案2】:

    从 Qt 5.13 开始 QTreeView::expandRecursively 可用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2011-03-18
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多