8

モデルと 2 つのビューを次のように設定しています。

Model ---> OSortFilterProxyModel ---> OListView
Model ------------------------------> OTableView

ユーザーがいずれかのビューで何かを選択すると、もう一方のビューにその選択が反映されます。そこで、QSelectionModel を使用してそれらをリンクすると考えました。しかし、これはうまくいきません。実際には同じモデルを持っているのに、ビューが2つの異なるモデルを持っていると思っているからだと思います。これを機能させる方法はありますか?

4

3 に答える 3

2

おそらく起こっていることは、ビューに 2 つの異なるモデルがあるということです。1 つは元のモデルで、もう 1 つは並べ替えフィルター モデルです。

これが機能するかどうかはわかりません.Qtが「アクティブ化」と見なすものによって異なりますが、ビューのアクティブ化された各スロットに関数を接続できます。これらはモデル インデックスを渡します。適切な方向 (mapFromSource および mapToSource) でプロキシ モデルを介してモデル インデックスを送信する必要があります。次に、他のビューで setCurrentIndex を呼び出します。

アクティブ化されたシグナルのドキュメントには、「アクティブ化された」と見なされるものはプラットフォームによって異なると記載されています。選択モデルの選択変更信号など、ラッチできる他の信号がある場合があります。ユーザーに表示されるように選択を変更するには、別の呼び出しを行う必要がある場合があります。そして最後に、ソース モデルとの間のマッピングについて覚えている限り、派生した QSelectionModel で行うことが可能であるか、またはより簡単である可能性があります。

于 2008-09-25T23:44:51.353 に答える
1

おそらく、 void QItemSelectionModel::selectをQAbstractProxyModel::mapSelectionFromSourceおよびQAbstractProxyModel:: mapSelectionToSourceと組み合わせて使用​​する必要があります。QListViewのselectionChangeシグナルハンドラーには、

tableView->selection()->select(
    proxyModel->mapSelectionToSource(selected),
    QItemSelectionModel::ClearAndSelect);

同様に、QTableViewのsignalChangeシグナルハンドラのmapSelectionFromSourceを使用します。

テーブルがリストの選択を変更し、それがテーブルの選択などを変更するときに、Qtが無限再帰を防ぐかどうかわからないことに注意してください...

于 2011-09-19T13:32:54.403 に答える
1

モデルのサブクラスがどのように実装されているかはよくわかりませんが、選択は永続的なモデル インデックスが正しいかどうかによって異なります。ソースコードを提供できますか? 両方で同じ選択モデルを使用していますか?

于 2009-01-14T20:45:52.863 に答える