我有一个模型,我将动态添加符号。 我正在使用代理模型和选择模型来链接视图 每当我向源模型添加符号时,代理模型都会更新,但我为视图设置的选择模型会搞砸。 它不再识别任何选择 谁能告诉我为什么?
void SymbolViewer::on_openButton_clicked()
{
this->selModel = ui->symbolListView->selectionModel();
...
}
每次我点击一个按钮来处理选择时,我都会设置选择模型。
答案 0 :(得分:1)
我确定您尝试使用选择模型提供的索引来访问模型数据。但是选择模型将返回相对于视图模型的索引。它是代理人。因此,要访问模型的数据,您必须映射它:
e.g:
考虑您有关于当前项目更改的信号:
connect( p_selectionModel,
SIGNAL( currentChanged(const QModelIndex &, const QModelIndex &)),
this,
SLOT(viewCurrentChanged(const QModelIndex &, const QModelIndex &)));
在你的插槽中:
viewCurrentChanged(const QItemSelection & selected, const QItemSelection & deselected)
选中将是您的代理的QModelIndex。您可以通过
访问数据selected.data() ..
但如果你的访问方式如此:
your_model->data( selected, role )
您使用代理索引访问模型时会失败。 你应该这样做:
your_model->data( proxy_model->mapToSource(selected) , role )
如果您使用QSelection,(如在selectionChanged(const QItemSelection& selected,const QItemSelection& deselected)信号中)使用
要执行反向路径,请使用:
QItemSelection QAbstractProxyModel::mapFromSource(const QModelIndex & sourceIndex) const QItemSelection QAbstractProxyModel::mapSelectionFromSource(const QItemSelection & sourceSelection)
并且不要在该按钮插槽上设置选择模型!这没有道理。它将永远是相同的。