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();
}