setFilterRegExp过滤除了名称为AAA的项,不用正则表达式
时间: 2024-03-02 07:53:35 浏览: 116
实现自定义模型-vlad经典论文
可以通过实现自定义的QSortFilterProxyModel来实现在QTreeView中使用setFilterRegExp过滤除了名称为AAA的项的功能,而不用正则表达式。具体操作如下:
1. 定义一个自定义的QSortFilterProxyModel,并重写其filterAcceptsRow函数:
```
class MySortFilterProxyModel : public QSortFilterProxyModel
{
public:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
{
QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
QString text = sourceModel()->data(index, Qt::DisplayRole).toString();
return !text.startsWith("AAA");
}
};
```
在上述代码中,重写了QSortFilterProxyModel的filterAcceptsRow函数,该函数返回一个bool值,表示该行是否符合过滤条件。在本例中,获取该行的数据,并判断是否以“AAA”开头,如果是则返回false,表示该行不符合过滤条件,否则返回true。
2. 在使用QTreeView之前,将其model设置为自定义的QSortFilterProxyModel:
```
MySortFilterProxyModel *proxyModel = new MySortFilterProxyModel(this);
proxyModel->setSourceModel(treeView->model());
treeView->setModel(proxyModel);
```
在上述代码中,首先创建了一个自定义的QSortFilterProxyModel,并将其源模型设置为QTreeView的模型。然后将QTreeView的模型设置为该自定义模型。
这样,在QTreeView中使用setFilterRegExp函数时,就会调用自定义的filterAcceptsRow函数,实现过滤除了名称为AAA的项的功能。
阅读全文