c++ - QTreeView 的两个嵌套代理模型和段错误

标签 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 调用时代码崩溃。

最佳答案

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

关于c++ - QTreeView 的两个嵌套代理模型和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951206/

相关文章:

c++ - 在 C++ 中使用集合迭代器

QTextDocument 换行处理和省略

javascript - QML - 将 JS 函数的代码作为字符串获取

qt - QTreeView&QAbstractItemModel&insertRow

c++ - 无法在主窗口类中实例化指针

c++ - 错误 : expected primary expression

c++ - 将字符串转换为自定义类

c++ - C/C++多面体交集计算软件包

c++ - 为什么要隐式定义复制赋值运算符?

c++ - 显示QList内容