選択モデルによって指定されたインデックスを使用してモデル データにアクセスしようとしていると確信しています。ただし、選択モデルは、ビューのモデルに関連するインデックスを返します。そしてそれはプロキシです。したがって、モデルのデータにアクセスするには、それをマップする必要があります:
例えば:
現在のアイテムの変更に関するシグナルがあるとします。
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) シグナルのように) を使用します。
mapSelectionToSource()
逆のパスを実行するには、次を使用します。
QItemSelection QAbstractProxyModel::mapFromSource(const QModelIndex & sourceIndex) const
QItemSelection QAbstractProxyModel::mapSelectionFromSource(const QItemSelection & sourceSelection)
そして、そのボタン スロットに選択モデルを設定しないでください。意味がない。それはいつも同じです。