使用QSortFilterProxyModel进行QTableView筛选(分组筛选器)

使用QSortFilterProxyModel进行QTableView筛选(分组筛选器),qt,filtering,qtableview,Qt,Filtering,Qtableview,似乎我不能一次过滤多个列。我想这是使用过滤器的常见用法,也许我遗漏了什么 例如,我的QTableView中有4列,比如说列X(string)、Y(int)、Z(string)、Q(string)。我希望通过filter_1列X进行过滤,并通过filter_2列Z进行过滤。是否可以为多个列(动态)设置QSortFilterProxyModel过滤器,但不能为所有列设置过滤器(重新实现filterAcceptsRow) 谢谢您可以使用setFilterRegExp()、setFilterWildca

似乎我不能一次过滤多个列。我想这是使用过滤器的常见用法,也许我遗漏了什么

例如,我的
QTableView
中有4列,比如说列
X(string)、Y(int)、Z(string)、Q(string)
。我希望通过
filter_1
X
进行过滤,并通过
filter_2
Z
进行过滤。是否可以为多个列(动态)设置
QSortFilterProxyModel
过滤器,但不能为所有列设置过滤器(重新实现
filterAcceptsRow


谢谢

您可以使用setFilterRegExp()、setFilterWildcard()或setFilterFixedString()方法来设置筛选器。QT文档中的一个示例是:

proxyModel->setFilterRegExp(QRegExp(".png", Qt::CaseInsensitive,
                                             QRegExp::FixedString));
proxyModel->setFilterKeyColumn(1); 
如果这些方法还不够,根据Qt文档设计是通过继承来使用的

对于高级用户, QSortFilterProxy模型可以是 子类,提供一种机制 使自定义筛选器能够 执行


在这种情况下,您需要对filterAcceptsRow()方法进行子类化和重写。

我尝试使用子类和重写filterAcceptsRow()方法,但使用该方法,筛选器将对其中选定的所有列起作用。我需要动态的方法,所以我将能够有时过滤X列,有时过滤X列,有时过滤X列,有时过滤X列,有时过滤Y列,有时过滤X列,有时过滤X列,有时过滤Y列,有时过滤Z列,有时过滤Q列。我将对它进行更多的处理,并让你们知道它是如何运行的。看看这个例子。做一些类似的事情,或者你也可以使用filterAcceptsColumn方法花了一些时间在我的案例中实现它,works!谢谢!