2009-06-30 23 views
4

ソートされた情報を表示するQTreeViewを作成しようとしています。これを行うには、ビューとモデルの間にQSortFilterProxyModelを使用します。QTreeView - モデルのソートとフィルタリング

問題は、行の数を最初のn行(ソート後)に制限したいということです。モデルのフィルタ関数は元のsourceRowを受け取り、使用できません。

2つのQSortFilterProxyModelを連鎖しようとしました。ソートの最初のものとフィルタリングの2番目のものです。しかし、それは2番目のproxymodel(フィルタリング)は、並べ替えられた行を受信しないようだ....

それを行う別の方法はありますか? 誰もがこの技術(2つのプロキシモデルの連鎖)を使用していて、それは機能しますか?私はをrowCountで試したし、それが動作しません :

はあなたに

EDITに感謝します。 私は2つのプロキシモデルを連鎖しようとしましたが、問題はビューが受信するモデルのソート関数を呼び出すことです。したがって、最初のプロキシがソートされ、2番目のフィルタがソートされるとフィルタモデルで呼び出され、データはソートされません。

EDIT2:Qtのソースコードを調べたところ、フィルタリングはソート前に行われていたので、filterAcceptsRow()ではソート順はわかりません。

+0

あなたはhttp://www.qtcentre.orgで質問をしようとしましたか? –

答えて

0

これを解決するためにいくつかの複雑な方法を試した後、私は問題の小さなハックを行いました。私は行を挿入/削除した後、最初のn行を隠すためsetRowHiddenを呼び出します。 これは最も洗練された解決策ではなく、私のニーズに特化していますが、より良い選択肢を見つけることができません。

gtkについては、フィルタとソートプロキシモデルが分離されているので、これはかなり簡単に行うことができます。

私はまだ誰かがこれに対してより良い解決策を提供できると考えています。

0

奇妙なことに、あなたはrowCountメソッドをオーバーライドして、ちょうど25(または何でもnがあなたのケースにあります)を返そうとしましたか?それは...それと同じくらい簡単かもしれません...もしあなたが常に少なくともnのアイテムを持っているならば。

それ以外の場合は、モデルをチェーンしてみることができます。なぜそれがうまくいかないのか分かりませんが、自分のようなものを試したことはありません。

関連する問題