首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

QSortFilterProxyModel不会动态更新过滤器吗?

QSortFilterProxyModel 是 Qt 框架中的一个类,用于对数据进行排序和过滤。它本身并不会自动动态更新过滤器,需要手动触发过滤器的更新。当数据源发生变化时,需要调用 QSortFilterProxyModelinvalidate() 方法来重新应用过滤器。

以下是一个简单的示例代码,展示了如何使用 QSortFilterProxyModel 并在数据源发生变化时更新过滤器:

代码语言:txt
复制
#include <QCoreApplication>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建数据模型
    QStandardItemModel model(5, 2);
    for (int row = 0; row < 5; ++row) {
        for (int col = 0; col < 2; ++col) {
            QStandardItem *item = new QStandardItem(QString("(%1,%2)").arg(row).arg(col));
            model.setItem(row, col, item);
        }
    }

    // 创建代理模型并设置过滤器
    QSortFilterProxyModel proxyModel;
    proxyModel.setSourceModel(&model);
    proxyModel.setFilterRegExp("^(1|3).*$"); // 只显示第一列值为1或3的行

    // 输出过滤后的数据
    for (int row = 0; row < proxyModel.rowCount(); ++row) {
        for (int col = 0; col < proxyModel.columnCount(); ++col) {
            QModelIndex index = proxyModel.index(row, col);
            qDebug() << proxyModel.data(index).toString();
        }
    }

    // 修改数据源
    model.item(2, 0)->setText("(4,0)");

    // 更新过滤器
    proxyModel.invalidate();

    // 输出更新后的过滤数据
    qDebug() << "After update:";
    for (int row = 0; row < proxyModel.rowCount(); ++row) {
        for (int col = 0; col < proxyModel.columnCount(); ++col) {
            QModelIndex index = proxyModel.index(row, col);
            qDebug() << proxyModel.data(index).toString();
        }
    }

    return a.exec();
}

在这个示例中,我们首先创建了一个 QStandardItemModel 作为数据源,并设置了 QSortFilterProxyModel 的过滤器。然后,我们修改了数据源中的一个值,并调用 invalidate() 方法来更新过滤器。最后,我们输出了更新后的过滤数据。

参考链接:

如果你遇到了 QSortFilterProxyModel 不会动态更新过滤器的问题,可能是因为你没有在数据源发生变化时调用 invalidate() 方法。确保在数据源发生变化后调用此方法,以重新应用过滤器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券