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