Qt使用数据库模型中的删除详解

以下使用 QSqlTableModel 模型,使用tableView显示内容

以下为界面:

Qt使用数据库模型中的删除详解_第1张图片

这里主要介绍删除操作:

 删除一行为:

    int row=ui->tableView->currentIndex().row();//获取行号
    model->revertRow(row);//删除该行
    model->submitAll();//提交

删除多行的操作:

  1. 将tableView设置为可以多选
  2. 获取视图中的选择的索引

 1.将tableView设置为可以多选(使用ctrl 和shift操作)

tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
//设置可以进行多选(系统默认为单选)

Qt使用数据库模型中的删除详解_第2张图片

 效果为:

Qt使用数据库模型中的删除详解_第3张图片

 2.获取已选择的索引

视图中的选择已经在之前的一篇文章中已经详细解释过了在这里就不进行解释了

处理模型视图中的选择_旷工锁的博客-CSDN博客

步骤为:

  •  创建一个项目的选择模型(QItemSelectionModel)
  •  用模型索引列表来接收选择模型中的选择索引(QModelIndexList)
  •  遍历模型索引列表
    QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
    const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
    for(const QModelIndex &index:modelList)
    {
        qDebug()<

选中全部:

Qt使用数据库模型中的删除详解_第4张图片

Qt使用数据库模型中的删除详解_第5张图片

选取少量几个:

Qt使用数据库模型中的删除详解_第6张图片

 Qt使用数据库模型中的删除详解_第7张图片

如果先选择下面的数据再选择上面的数据:

 Qt使用数据库模型中的删除详解_第8张图片

Qt使用数据库模型中的删除详解_第9张图片

以上可以总结出以下结论:

  • 输出的数据以选择的前后来进行输出
  • 当选择某行的多个项时会多次输出
  • 所以为了防止多次删除同一行,需要进行去重

去重的常用方法:

1.使用QVector容器,然后排序,然后去重。

    QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
    const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
    QVector vector;
    for(const QModelIndex &index:modelList)
    {
        vector.push_back(index.row());//添加内容
    }
    std::sort(vector.begin(),vector.end());//排序
    QVector::iterator end=std::unique(vector.begin(),vector.end());//去重
    vector.erase(end,vector.end());//删除多余部分
    for(int a:vector)
    {
        qDebug()<

Qt使用数据库模型中的删除详解_第10张图片

Qt使用数据库模型中的删除详解_第11张图片

 2.使用QMap容器(该容器会自动去重和排序)

    QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
    const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
    QMap mp;
    for(const QModelIndex &index:modelList)
    {
        mp.insert(index.row(),1);//插入数据
    }
    QMap::iterator it=mp.begin();
    for(;it!=mp.end();it++)
    {
        qDebug()<

 Qt使用数据库模型中的删除详解_第12张图片

Qt使用数据库模型中的删除详解_第13张图片

 获取行号之后就进行删除提交即可

        QMap::iterator it=mp.begin();
        for (;it!=mp.end();it++) {
            model->removeRow(it.key());
        }
        model->submitAll();//提交

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