在我的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());
}
提前致谢
答案 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());
}