2013-11-28 205 views
1

我目前有一個搜索按鈕,我想搜索我的模型的特定列。因此,我只想匹配的行顯示在我的tableview中。 我附加了一個QSortFilterProxyModel *對象作爲源視圖,並設置了QStandardItemModel *作爲源。然後用我的搜索按鈕我做了以下連接QSortFilterProxyModel和插槽setFilterFixedString

QObject::connect(ui.lineEditSearch,SIGNAL(textChanged(QString)),proxyModelFilter,SLOT(setFilterFixedString(QString))); 

現在我的印象是,在輸入相關的行將返回。然後我意識到我還沒有指定要過濾器代理模型搜索哪些列。 我知道我可以實現一個從QSortFilterProxyModel繼承的類並重新實現它的filterAcceptsRow。我想知道是否有一種方法可以避免創建一個從QSortFilterProxyModel繼承的類,並且只需使用QSortFilterProxyModel類來告知在調用Slot setFilterFixedString時要搜索哪些列?

+2

'filterKeyColumn'允許您搜索單個列或全部(-1)(http://qt-project.org/doc/qt-5.1/qtcore/qsortfilterproxymodel.html#filterKeyColumn-prop)是這樣嗎?你需要,還是你需要多個但不是全部列?那麼你必須繼承,我想。 –

+0

我只需要搜索一列,如果找到該關鍵字,然後顯示匹配的行 – Rajeshwar

+0

這樣做你可以把它作爲答案,所以我可以標記它 – Rajeshwar

回答

2

要過濾的列可以通過QSortFilterProxyModel::filterKeyColumn進行設置。 它允許指定單個列,或全部(-1,默認值)。

或者,可以定義一個自定義過濾器角色,返回要搜索的所有字符串的串聯,並通過setFilterRole()進行設置。