2011-07-05 27 views
3

私は一度に複数の列をフィルタリングすることができないようです。フィルタを使用する際によく使用されると思いますが、何か不足している可能性があります。QSortFilterProxyModel(フィルタをグループ化する)でQTableViewフィルタリング

たとえば、QTableViewには4列ありますが、列X (string), Y (int), Z (string), Q (string)としましょう。 filter_1の列Xでフィルタし、filter_2の列Zでフィルタしたいと思います。 QSortFilterProxyModelフィルタを複数の列に(動的に)設定できますが、すべてではありません(filterAcceptsRowを再実装しています)。

おかげ

答えて

6

あなたはフィルタを設定するsetFilterRegExp()、setFilterWildcard()、またはsetFilterFixedString()メソッドを使用することができます。 QTドキュメントの例がある:これらの方法が十分でない場合

proxyModel->setFilterRegExp(QRegExp(".png", Qt::CaseInsensitive, 
              QRegExp::FixedString)); 
proxyModel->setFilterKeyColumn(1); 

、Qtのドキュメントcustomizing proxy modelsに従って継承を介して使用するように設計されています。高度なユーザーの場合

、 QSortFilterProxyModelは が を実装するカスタムフィルタを可能にするメカニズムを提供する、サブクラス化することができます。

この場合、filterAcceptsRow()メソッドをサブクラス化してオーバーライドする必要があります。

+0

サブクラスを使用してfilterAcceptsRow()メソッドをオーバーライドしようとしましたが、そのメソッドでフィルタはその中で選択されたすべてのカラムで機能します。動的なメソッドが必要なので、時にはX、Y、時にはX、Y、Z、Xの列をフィルタリングすることができます。 – krizajb

+1

この例はhttp://www.qtcentre.org/threads/24267-QSortFilterProxyModel-setFilterRegExp-for-more-than-1-columnをご覧ください。同様のことをするか、filterAcceptsColumnメソッドを使用することもできます –

+0

私のケースに実装するには時間がかかりました。どうもありがとう! – krizajb

関連する問題