Qt模型/视图:代理模型上的setRootIndex失败
问题描述:
我有一个树模型类继承QAbstractItemModel
(比方说Model
)和两个过滤代理模型继承QSortFilterProxyModel
。这两种代理模式都在同一个模型实例设置:Qt模型/视图:代理模型上的setRootIndex失败
m_groupFilter->setSourceModel(m_model);
m_parameterFilter->setSourceModel(m_model);
和这些过滤器是用户界面上的两个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);
以上代码失败,此输出,并警告:
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
我可以看到,这只有当发生输入指数模型setRootIndex
和对象调用setRootIndex
,不同(这里不是这种情况)或者索引是无效的(这里既不是这种情况)。以下是Qt source code that generates the warning:
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();
}
那么,为什么它不工作?
答
您显示的代码是好的。我将它复制到Qt Creator的标准模板项目中。它工作正常。请检查您的代理模型实施和setRootIndex
调用的其他地方。