Qt模型/视图:代理模型上的setRootIndex失败

Qt模型/视图:代理模型上的setRootIndex失败,qt,Qt,我有一个继承qabstractemmodel(比如说model)的树模型类和两个继承QSortFilterProxyModel的过滤器代理模型。两个代理模型都设置在同一个模型实例上: m_groupFilter->setSourceModel(m_model); m_parameterFilter->setSourceModel(m_model); 这些过滤器设置在UI上的两个QTreeViews上: ui->treeViewGroups->setModel(m_gro

我有一个继承
qabstractemmodel
(比如说
model
)的树模型类和两个继承
QSortFilterProxyModel
的过滤器代理模型。两个代理模型都设置在同一个模型实例上:

m_groupFilter->setSourceModel(m_model);
m_parameterFilter->setSourceModel(m_model);
这些过滤器设置在UI上的两个
QTreeView
s上:

ui->treeViewGroups->setModel(m_groupFilter);
ui->treeViewParameters->setModel(m_parameterFilter);
现在,我想将第二个视图的
setRootIndex()
从第一个视图添加到所选项目。连接信号等我这样做:

QModelIndex actualIndex = m_groupFilter->mapToSource(index);
QModelIndex mappedIndex = m_parameterFilter->mapFromSource(actualIndex);
qDebug() << mappedIndex.isValid();
qDebug() << ui->treeViewParameters->model();
qDebug() << mappedIndex.model();
ui->treeViewParameters->setRootIndex(mappedIndex);
我可以看到,只有当
setRootIndex
的输入索引模型与调用
setRootIndex
的对象不同(此处不是这种情况)或索引无效(此处也不是这种情况)时,才会发生这种情况。以下为


那么为什么它不起作用呢?

您显示的代码没有问题。我在Qt Creator的标准模板项目中复制了它。它工作正常。检查您的代理模型实现以及
setRootIndex
调用的其他位置

true
ConfigurationParameterFilterModel(0x43d190)
ConfigurationParameterFilterModel(0x43d190)
QAbstractItemView::setRootIndex failed : index must be from the currently set model
QAbstractItemView::setRootIndex failed : index must be from the currently set model
void QAbstractItemView::setRootIndex(const QModelIndex &index)
{
    Q_D(QAbstractItemView);
    if (Q_UNLIKELY(index.isValid() && index.model() != d->model)) {
        qWarning("QAbstractItemView::setRootIndex failed : index must be from the currently set model");
        return;
    }
    d->root = index;
    d->doDelayedItemsLayout();
    d->updateGeometry();
}