【问题标题】:QTableView filtering with QSortFilterProxyModel (grouping filters)使用 QSortFilterProxyModel 进行 QTableView 过滤(分组过滤器)
【发布时间】:2011-07-05 08:00:52
【问题描述】:

看来我不能一次过滤超过一列。我认为这是使用过滤器时的常见用法,也许我遗漏了一些东西。

例如,我的QTableView 中有 4 列,假设列 X (string), Y (int), Z (string), Q (string)。我希望按filter_1X 过滤并按filter_2Z 过滤。是否可以为超过一列(动态)设置QSortFilterProxyModel 过滤器,但不是全部(重新实现filterAcceptsRow)。

谢谢

【问题讨论】:

    标签: qt filtering qtableview


    【解决方案1】:

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

    proxyModel->setFilterRegExp(QRegExp(".png", Qt::CaseInsensitive,
                                                 QRegExp::FixedString));
    proxyModel->setFilterKeyColumn(1); 
    

    如果这些方法还不够,根据 Qt 文档,customizing proxy models 被设计为通过继承使用。

    对于高级用户, QSortFilterProxyModel 可以 子类化,提供一种机制 使自定义过滤器成为 实施。

    在这种情况下,您需要继承和覆盖 filterAcceptsRow() 方法。

    【讨论】:

    • 我尝试使用子类并覆盖 filterAcceptsRow() 方法,但使用该方法,过滤器将适用于其中选择的所有列。我需要动态方法,所以我有时可以自己过滤 X 列,有时是 X、Y,有时是 X、Y、Z、Q。我会做更多的工作,让你知道它是如何进行的。
    • 看看这个例子qtcentre.org/threads/…。做类似的事情,或者你也可以使用 filterAcceptsColumn 方法
    • 花了一些时间将它实施到我的案例中,工作!非常感谢!
    猜你喜欢
    • 2018-04-02
    • 2015-06-16
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多