Qt TableView根据字符串查找行

由于数据库作业要求采用文件输入输出,不能用数据库,也不能用sql语句实现查找,考虑到利用弹窗口的方式实现查找太复杂,因此利用文本编辑框来实现对商品的多条件查找。为了实现实时性,对文本框的文本变更信号进行监听,新建一个QString对象str1保存文本框数据,再建立一个QString对象str2保存行数据,利用QString的contains函数对比数据,该函数第一个参数为查找字符串a,第二个参数为目标字符串b,当能在b中找到a时返回true。考虑到用户输入时可能存在空格或者查找的目标行数存在空格,从而导致查找失败,因此利用QRegExp函数去掉所有空格、换行符,具体代码如下:

void Widget::on_textEdit_textChanged()
{
    ui->mmenu->setCurrentIndex(0);
    if(ui->textEdit->toPlainText()=="")
    {
        for(int i=0;i<ui->tableView->model()->rowCount();i++)
            ui->tableView->setRowHidden(i,false);
    }
    else
    {
        //获取文本框内容
        QString str=ui->textEdit->toPlainText();
        str.remove(QRegExp("\\s"));
        for(int i=0;i<ui->tableView->model()->rowCount();i++)
        {
            ui->tableView->setRowHidden(i,true);
            QString r="";
            //提取商品信息
            QAbstractItemModel *model=ui->tableView->model();
            QModelIndex index;
            for(int j=0;j<ui->tableView->model()->columnCount();j++)
            {
                index=model->index(i,j);
                r+=model->data(index).toString();
            }
            r.remove(QRegExp("\\s"));
            if(r.contains(str,Qt::CaseSensitive))
                ui->tableView->setRowHidden(i,false);
        }
    }
}

效果如下:
Qt TableView根据字符串查找行_第1张图片
Qt TableView根据字符串查找行_第2张图片

你可能感兴趣的:(学习)