看来我不能一次过滤超过一列。我认为这是使用过滤器时的常见用法,也许我遗漏了一些东西。
例如,我的 4 列,QTableView比方说 column X (string), Y (int), Z (string), Q (string)。我希望按filter_1列X过滤并按filter_2列过滤Z。是否可以为多于一列(动态)设置QSortFilterProxyModel过滤器,但不是全部(重新实施filterAcceptsRow)。
谢谢
看来我不能一次过滤超过一列。我认为这是使用过滤器时的常见用法,也许我遗漏了一些东西。
例如,我的 4 列,QTableView比方说 column 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 文档,定制代理模型被设计为通过继承使用。
对于高级用户,可以对 QSortFilterProxyModel 进行子类化,提供一种能够实现自定义过滤器的机制。
在这种情况下,您需要继承和覆盖 filterAcceptsRow() 方法。