QT开发中文网

QtableView过滤数据行C++

在QTableView中过滤数据行可以通过使用QSortFilterProxyModel来实现。下面是一个简单的例子:

  1. 创建一个QStandardItemModel对象并将其设置为QTableView的模型:
QStandardItemModel *model = new QStandardItemModel(this);
tableView->setModel(model);
  1. 向模型添加数据:
// 添加数据到模型
for (int row = 0; row < rowCount; ++row) {
    QList<QStandardItem*> items;
    for (int column = 0; column < columnCount; ++column) {
        QStandardItem* item = new QStandardItem(data[row][column]);
        items.append(item);
    }
    model->appendRow(items);
}
  1. 创建一个QSortFilterProxyModel对象并将其设置为QTableView的代理模型:
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);
tableView->setModel(proxyModel);
  1. 设置要过滤的列:
proxyModel->setFilterKeyColumn(columnIndex);
  1. 设置过滤规则:
proxyModel->setFilterRegExp(filterString);

完整的代码示例:

#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>

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

    QTableView tableView;

    // 设置模型
    QStandardItemModel *model = new QStandardItemModel(&tableView);
    tableView.setModel(model);

    // 添加数据到模型
    QList<QStringList> data = {{"John", "Doe", "30", "Male"},
                               {"Jane", "Smith", "25", "Female"},
                               {"Bob", "Johnson", "40", "Male"}};
    int rowCount = data.size();
    int columnCount = data[0].size();
    for (int row = 0; row < rowCount; ++row) {
        QList<QStandardItem*> items;
        for (int column = 0; column < columnCount; ++column) {
            QStandardItem* item = new QStandardItem(data[row][column]);
            items.append(item);
        }
        model->appendRow(items);
    }

    // 设置代理模型
    QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(&tableView);
    proxyModel->setSourceModel(model);
    tableView.setModel(proxyModel);

    // 设置要过滤的列和过滤规则
    int columnIndex = 1; // 过滤第2列(即姓氏)
    QString filterString = "Doe"; // 过滤出姓氏为Doe的行
    proxyModel->setFilterKeyColumn(columnIndex);
    proxyModel->setFilterRegExp(filterString);

    tableView.show();

    return a.exec();
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=688

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?