QT重写QSortFilterProxyModel实现多列数据过滤
生活随笔
收集整理的這篇文章主要介紹了
QT重写QSortFilterProxyModel实现多列数据过滤
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在QTableView中可以使用QSortFilterProxyModel來過濾model的數據,可以通過setFilterKeyColumn(int colnum)設置需要過濾的列,當設置為-1時則過濾對象為所有列,但是此種方式只要某一列中有符合條件的數據就會被顯示出來
因此我們可以重寫QSortFilterProxyModel的filterAcceptsRow(int source_row, const QModelIndex &source_parent)方法實現同時過濾指定多列的數據
效果如下:(源碼鏈接在文末)
關鍵代碼:
void MultipleColSortFilterProxyModel::setFilterKeyColumn(int column) {m_column = column;QSortFilterProxyModel::setFilterKeyColumn(column); }void MultipleColSortFilterProxyModel::setFilterMap(QMap<int,QString> &strlist) {m_FilterMap = strlist; }bool MultipleColSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {if(m_column == -1){QStringList keys;int column_count = this->sourceModel()->columnCount(source_parent);for(int i =0;i<column_count;i++){QModelIndex index = this->sourceModel()->index(source_row,i,source_parent);keys.push_back(this->sourceModel()->data(index).toString());}for(auto it = m_FilterMap.begin();it!=m_FilterMap.end();it++){int col = it.key();QString str = it.value();if(str.isEmpty())continue;if(!keys.at(col).contains(str))return false;}return true;}else{return QSortFilterProxyModel::filterAcceptsRow(source_row,source_parent);} }使用:
m_SortModel->setFilterMap(map); m_SortModel->setFilterKeyColumn(-1); //map的內容 key:列號 val:過濾值源碼鏈接
總結
以上是生活随笔為你收集整理的QT重写QSortFilterProxyModel实现多列数据过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web安全测试之越权测试案例
- 下一篇: 基于C++的教室管理系统