QSortFilterProxyModel 的過濾 排序


 

 

注意模型索引轉換××××××××

##建立模型數據

數據成員

  custommodel =new CustomModel();

  customproxymodel = new CustomProxyModel;

       customproxymodel->setSourceModel(custommodel);

      customtable= new CustomTable(this);

     customtable->setModel(customproxymodel);

  *設置數據時先setmodel(null)

   customtable->setModel(NULL);

   customproxymodel->setSourceModel(NULL);

 

//向 custommodel 中添加數據記錄............

//設置模型

  customproxymodel->setSourceModel(custommodel);

customtable->setModel(customproxymodel);

 ##過濾行

#1 按指定行,列過濾表格

 a:過濾行重載filterAcceptsRow(int source_row,const QModelIndex & source_parent)const 虛函數 返回true 顯示符合條件的行 ;false 不顯示符合條件的行

{

  if(m_filterflag)

  {

    QModelIndex index1=sourceModel()->index(source_row,0,source_parent); //注意source_row 是指在源模型中的行號,0:過濾時按那列的元素進行過濾

    if(index1.row()!=2)return true;//當第2行時 過濾掉 不顯示

      return false;

  }

  return true;

}

b:過濾列重載filterAcceptsColumn(int source_column,const QModelIndex & source_parent)const 虛函數

{

  if(m_filterflag)//是否過濾標識

  {

    QModelIndex index1=sourceModel()->index(4,source_column,source_parent); //注意source_columnw 是指在源模型中的列索引,4:過濾時按那行的元素進行過濾

    if(index1.column()!=1)return true;//當第1行時 過濾掉 不顯示

      return false;

  }

  return true;

}

3:刷新表格過濾 添加公共函數調用QsortFilterProxyModel的invalidateFilter()接口

costomproxy::setFilterFlag(bool flag)

{

  m_filterflag = flag;

}

costomproxy::filterflag(){return m_filterflag;}

costomproxy::invalidateModel()

{

  invalidateFilter()

}

4:調用刷新表格

bool flag  = m_proxyModel->filterflag();

m_proxyModel->setFilterFlag(!flag);

m_proxyModel->invalidateModel();

##排序

a重載QSortFilterProxyModel::lessThan 函數(const QModelIndex& left,const QModelIndex& right)const

*注意QModelIndex的換算

{ //按第三列排序

bool ok1,ok2;

 QModelIndex leftIdx,rightidx;

leftidx=left.model()->index(left.row(),3,left.parent());

rightidx=rightidx.model()->index(right.row(),3,right.parent());

int l =left.data().toString().toInt(&ok1);

int r= right.data().toString().toInt(&ok2);

retur l<r;

 

}

b:調用方法

調用

customtable->setSortingEnabled(true);

或者

customproxymodel->sort(1,Qt::DescendingOrder);

 

 參考1: https://blog.csdn.net/qq78442761/article/details/84875123?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

2:https://blog.csdn.net/wjs1033/article/details/50732393

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM