QT开发中文网

C++实现QStandardItemModel 筛选部分数据

QStandardItemModel是一个用于展示结构化数据的模型,可以通过筛选来显示部分数据。

下面是一个简单的例子,使用QStandardItemModel和QTableView来展示一组数据,并实现根据输入文本筛选显示部分数据。

  1. 创建QStandardItemModel对象,并设置表头数据
QStandardItemModel *model = new QStandardItemModel(this);
model->setColumnCount(3);
model->setHeaderData(0, Qt::Horizontal, "ID");
model->setHeaderData(1, Qt::Horizontal, "Name");
model->setHeaderData(2, Qt::Horizontal, "Age");
  1. 添加数据到模型中
QList<QStandardItem*> items;
for (int i = 0; i < data.size(); ++i) {
    QList<QStandardItem*> rowItems;
    for (int j = 0; j < data[i].size(); ++j) {
        QStandardItem *item = new QStandardItem(data[i][j]);
        rowItems.append(item);
    }
    model->appendRow(rowItems);
}
  1. 创建QTableView,并将模型设置给它
QTableView *tableView = new QTableView(this);
tableView->setModel(model);
  1. 创建QLineEdit,并将其与筛选槽函数连接
QLineEdit *lineEdit = new QLineEdit(this);
connect(lineEdit, &QLineEdit::textChanged, this, &MainWindow::filterData);
  1. 实现筛选槽函数filterData(),根据输入文本筛选数据并更新模型
void MainWindow::filterData(const QString &text)
{
    QRegExp regExp(text, Qt::CaseInsensitive, QRegExp::FixedString);
    QStandardItemModel *model = static_cast<QStandardItemModel*>(tableView->model());
    for (int i = 0; i < model->rowCount(); ++i) {
        bool match = false;
        for (int j = 0; j < model->columnCount(); ++j) {
            QStandardItem *item = model->item(i, j);
            if (item->text().contains(regExp)) {
                match = true;
                break;
            }
        }
        tableView->setRowHidden(i, !match);
    }
}

在上面的代码中,我们使用QLineEdit作为筛选输入框,使用textChanged()信号来检测文本变化,并将其与filterData()槽函数连接。

在filterData()函数中,我们根据输入文本创建一个正则表达式,并逐行遍历模型中的数据,如果某一行的数据匹配了正则表达式,则将该行设置为可见,否则将该行设置为隐藏。

这样,就可以实现根据输入文本筛选部分数据的功能了。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?