Andyduflunce 2022-03-21 15:47 采纳率: 100%
浏览 103
已结题

Qt treeView 自定义筛选条件问题

在重写TreeviewfilterAcceptsRow过滤事件时,在一个TreeView下面有多个节点,如何实现点击一个复选框,只筛选当前节点下面的内容,并且在不选中复选框情况下,恢复原始数据
问题相关代码,请勿粘贴截图

bool filter = QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);

   if (filter)
   {
       return true;
   }
   else
   {
       // check all decendant's
       QModelIndex source_index = sourceModel()->index(source_row, 0, source_parent);
       for (int k=0; k<sourceModel()->rowCount(source_index); k++)
       {
           if (filterAcceptsRow(k, source_index))
           {
               return true;
           }
       }
   }

   return false;
运行结果及报错内容

运行结果可以实现对整个treeview实现过滤,但无法对单个节点下的内容进行过滤

我的解答思路和尝试过的方法
我想要达到的结果:实现点击一个复选框,只筛选当前节点下面的内容,并且在不选中复选框情况下,恢复原始数据
  • 写回答

1条回答 默认 最新

  • _GX_ 2022-03-21 16:55
    关注
    bool filter = QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
    if (filter)
        return true;
    QModelIndex current_index = mapToSource(treeView->currentIndex());
    QModelIndex source_index = sourceModel()->index(source_row, 0, source_parent);
    while (source_index.isValid() && source_index != current_index)
        source_index = source_index.parent();
    return source_index != current_index;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月21日