QTreeView的两个嵌套代理模型和segfault

时间:2012-08-14 11:21:27

标签: c++ qt

我正在使用QTreeView和两个基于QSortFilterProxyModel的过滤器。

我需要获取QTreeView中当前显示的项目列表,所以我选择了索引(通过 - > selectionModel() - > selectedIndexes()),将它们传递给简单的递归函数,但总是得到SIGSEGV。在调试时我发现调用堆栈的结束位置 - 它位于QVector :: fill中。

也许我做错了什么?如果我通过mapToSource()传递索引,我会收到所有项目,而不仅仅是显示的项目。

迭代器功能很简单:

void CollectionTreeWidget::iterator(const QModelIndex & index, QModelIndexList & items)
{
    int count = p->dateFilterProxy->rowCount(index);
    for (int i=0; i<count; i++) {
        QModelIndex t = index.child(i, 0);
        iterator(t, items);
    }
}

此处dateFilterProxy是用作QTreeView模型的模型。代码在rowCount电话上崩溃。

1 个答案:

答案 0 :(得分:1)

我认为我在上面的算法中发现了错误,为了消除段错误,我们不能计算索引叶子的子索引(即没有子节点的节点)。