c++,不继承QSortFilterProxyModel第一列过滤本月信息,第二列过滤人名叫小明的,怎么实现
时间: 2023-07-30 12:05:47 浏览: 169
QT-QSortFilterProxyModel代理实现排序、支持联合多列过滤
你可以通过继承 `QSortFilterProxyModel` 类来实现过滤功能,然后重写 `filterAcceptsRow()` 函数来进行过滤操作。
以下是一个实现的示例代码:
```c++
class MySortFilterProxyModel : public QSortFilterProxyModel
{
public:
MySortFilterProxyModel(QObject *parent = nullptr);
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
};
MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
}
bool MySortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
// 获取第一列的数据
QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);
QString data0 = sourceModel()->data(index0).toString();
// 获取第二列的数据
QModelIndex index1 = sourceModel()->index(source_row, 1, source_parent);
QString data1 = sourceModel()->data(index1).toString();
// 过滤第一列为本月信息的行
QDate currentDate = QDate::currentDate();
QDate date = QDate::fromString(data0, "yyyy-MM-dd");
if (date.month() != currentDate.month()) {
return false;
}
// 过滤第二列为小明的行
if (data1 != "小明") {
return false;
}
return true;
}
```
在使用时,你只需要将数据模型设置为该自定义代理模型即可:
```c++
QTableView *tableView = new QTableView;
MySortFilterProxyModel *proxyModel = new MySortFilterProxyModel;
proxyModel->setSourceModel(sourceModel);
tableView->setModel(proxyModel);
```
这样,你就可以实现按照第一列过滤本月信息,按照第二列过滤人名叫小明的功能了。
阅读全文