Qt我如何过滤多个列?

时间:2013-08-22 10:34:19

标签: qt model combobox filter proxy

在我的Qt项目中,我使用sql,table view和qsortproxymodel来过滤列。问题在于,我只能过滤一列。例如,从类别“CATS”和类别“DOGS”,我只能过滤其中一个类别的项目。我想看看这两个项目,从狗和猫。 我怎么能这样做?

我的源代码是:

void Animals::on_comboBox_currentTextChanged(... QString &arg1) // class 
{ 
    ProxyModel->setFilterKeyColumn(3); 
    ProxyModel->setFilterFixedString(ui->combobox->currentText());
} 

void Animals::on_comboBox_2_currentTextChange... QString &arg1) // class with letters 
{ 
    ProxyModel->setFilterKeyColumn(4);
    ProxyModel->setFilterFixedString(ui->combobox_2->currentText());
} 

提前致谢

1 个答案:

答案 0 :(得分:3)

你应该继承QSortFilterProxyModel并重新实现filterAcceptsRow
来自Docs的例子:

bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
         const QModelIndex &sourceParent) const
 {
     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
     QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
     QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);

     return (sourceModel()->data(index0).toString().contains(filterRegExp())
             || sourceModel()->data(index1).toString().contains(filterRegExp()))
            && dateInRange(sourceModel()->data(index2).toDate());
 }