0

在我的 Qt 项目中,我使用 sql、表视图和 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());
} 

提前致谢

4

1 回答 1

4

您应该继承 QSortFilterProxyModel 并重新实现 Docs 中的 filterAcceptsRow
示例:

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());
 }
于 2013-08-22T11:31:30.397 回答