3
votes

It seems I am not capable of filtering more then one column at once. I think it's common usage when using filters, maybe I'm missing something.

For example, i have 4 columns in my QTableView, let's say column X (string), Y (int), Z (string), Q (string). I wish to filter by filter_1 column X and filter by filter_2 column Z. Is it possible to set QSortFilterProxyModel filter for more then one column (dynamically), but not all (re implementing filterAcceptsRow).

Thanks

1

1 Answers

6
votes

You can use setFilterRegExp(), setFilterWildcard(), or setFilterFixedString() methods to set a filter. An example from QT doc is :

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

If these methods are not sufficient, according to Qt documentation customizing proxy models is designed to be used via inheritance.

For advanced users, QSortFilterProxyModel can be subclassed, providing a mechanism that enables custom filters to be implemented.

In this case you need to sublass and override filterAcceptsRow() method.