我正在使用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
电话上崩溃。
答案 0 :(得分:1)
我认为我在上面的算法中发现了错误,为了消除段错误,我们不能计算索引叶子的子索引(即没有子节点的节点)。