2011-07-05 71 views
3

看來我不能夠在一次過濾多於一列。我認爲這是使用過濾器時的常見用法,也許我錯過了一些東西。與QSortFilterProxyModel(分組過濾器)過濾QTableView中

例如,我在我的QTableView 4列,假設列X (string), Y (int), Z (string), Q (string)。我希望通過filter_1X和過濾通過filter_2Z進行過濾。是否可以爲多個列(動態)設置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列它自己,有時X,Y,有時X,Y,Z,Q。將更多的工作,讓你知道它是如何去。 – krizajb

+1

看看這個例子http://www.qtcentre.org/threads/24267-QSortFilterProxyModel-setFilterRegExp-for-more-than-1-column。做類似的事情,或者你也可以使用filterAcceptsColumn方法 –

+0

花了一些時間來實現它到我的情況,工作!非常感謝! – krizajb