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

news2024/12/30 2:15:14

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

以下为界面:

这里主要介绍删除操作:

 删除一行为:

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

删除多行的操作:

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

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

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

 效果为:

 2.获取已选择的索引

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

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

步骤为:

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

选中全部:

 

选取少量几个:

 

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

 

 

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

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

去重的常用方法:

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

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

 

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

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

 

 

 获取行号之后就进行删除

    for(int i=0;i<mp.size();i++)
    {
        model->removeRow(i);
    }
   model->submitAll();//提交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git 关于分支和仓库的理解

何时需要initgit init//初始化本地仓库.git目录如果初始化就会在当前文件夹中出现.git的目录&#xff0c;该目录默认是隐藏的&#xff0c;需要关闭显示隐藏文件才能看到。执行完git init命令后&#xff0c;当前目录就成为了工作区&#xff08;工作区可以理解为操作本地仓库的车…

MyBatis-Plus知识快速入门

文章目录1.MyBatis-Plus简介2.入门案例2.1开发环境2.2创建测试数据库和表2.3创建SpringBoot工程2.4创建实体类以及lombok的使用2.5添加mapper2.6加入日志功能3.基本的CRUD3.1BaseMapper3.2插入3.3删除3.4修改3.5查询4.通用Service4.1创建Service接口和实现类5.常用注解5.1Table…

“华为杯”研究生数学建模竞赛2005年-【华为杯】A题:城市出租车交通规划综合模型(附获奖论文和matlab代码)

赛题描述 A: Highway Traveling time Estimate and Optimal Routing Ⅰ Highway traveling time estimate is crucial to travelers. Hence, detectors are mounted on some of the US highways. For instance, detectors are mounted on every two-way six-lane highways o…

springboot 分布式全局唯一id的生成-雪花算法snowflake

一 背景描述 1.1 问题产生 在分布式系统中&#xff0c;怎么使用全局唯一id&#xff1f; 在分布式是&#xff0c;微服务的架构中&#xff0c;或者大数据分库分表中&#xff0c;多个不同节点怎么保持每台机器生成的主键id不重复&#xff0c;具有唯一性&#xff1f; 方案1&…

【算法基础】归并排序(原理、过程、例题、代码)

一、归并排序原理 1. 算法介绍 归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有…

力扣 2309. 兼具大小写的最好英文字母

题目 给你一个由英文字母组成的字符串 s &#xff0c;请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母&#xff0c;则返回一个空字符串。 最好 英文字母的大写和小写形式必须 都 在 s 中出现。 英文字母 b 比另一个英文字母 a 更…

前端食堂技术周刊第 68 期:Astro 2.0、Nuxt v3.1.0、Bun v0.5、TS 实现 Stage 3 Decorators 提案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;萝卜牛腩煲 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Astro 2.0Nuxt v3.1.0Bun v0.5TS 实现 Stage 3 Decorators 提案Turbore…

【算法突击】排序算法系列(一) | 程序员面试 | 冒泡排序 | 快速排序 | 归并排序

【排序算法】 冒泡排序 | 快速排序 | 归并排序 文章目录【排序算法】 冒泡排序 | 快速排序 | 归并排序1. 冒泡排序1.1 核心思想1.2 代码实现2. 快速排序2.1 核心思想2.2 时间复杂度2.2 代码实现3. 归并排序3.1 核心思想3.2 时间复杂度3.3 代码实现1. 冒泡排序 1.1 核心思想 将…

【接口自动化】接口间参数传递的一种解决方案

本文转载自&#xff1a;接口间参数传递的一种解决方案 做过接口自动化测试的同学肯定都熟悉在全链路测试过程中&#xff0c;很多业务场景的完成并非由单一接口实现&#xff0c;而是由很多接口组成的一条链路实现。例如你在淘宝上购物场景。 不同于单接口测试&#xff0c;这种链…

2 线性模型

文章目录一般流程问题引入数据集与测试集过拟合与泛化开发集监督学习和非监督学习问题分析训练集、验证集、测试集模型设计模拟训练过程课程代码课后习题代码课程来源&#xff1a; 链接文档参考&#xff1a; 链接以及 BirandaのBlog&#xff01;一般流程 对于一般的线性模型来…

微信小程序 Springboot校园招聘求职系统

基于微信小程序的校园求职系统的设计基于现有的手机&#xff0c;可以实现首页、个人中心、岗位类型管理、用户管理、企业管理、招聘信息管理、应聘信息管理、系统管理等功能。方便用户对首页、招聘信息、我的等详细的了解及统计分析 一个基本的程序包含app.json、project.confi…

谈谈SpringBoot(二)

1. Spring Boot缓存 1.1 JSR-107 Spring从3.1开始定义了org.springframework.cache.Cache 和org.springframework.cache.CacheManager接口来统一不同的缓存技术&#xff1b; 并支持使用JCache&#xff08;JSR-107&#xff09;注解简化我们开发。 Cache接口为缓存的组件规范定义…

day23|93.复原IP地址、78.子集、90.子集II

93.复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 &q…

layui框架学习(2:颜色、图标、动画)

B站教学视频中对Layui的颜色没有专门介绍&#xff0c;而Layui官方教程中虽然有颜色章节&#xff0c;但也只是简单介绍了基色调、辅色调、中性的颜色的概念及用途&#xff0c;最后说明layui 内置了七种背景色&#xff0c;以便用于各种元素中&#xff0c;如&#xff1a;徽章、分割…

Go语言基础入门第二章

Go语言环境安装 下载地址&#xff1a;https://golang.google.cn/dl/ 下载完安装包直接安装即可&#xff0c;安装完毕后&#xff0c;打开cmd控制台&#xff0c;输入”go version“查看是否安装成功以及对应安装版本。 配置环境变量Go语言需要一个安装目录&#xff0c;还需要一个…

Spring Cloud_Eureka服务注册与发现

目录一、Eureka基础知识1.什么是服务治理2.什么是服务注册3.Eureka两组件二、单机Eureka构建步骤1.IDEA生成eurekaServer端服务注册中心2.服务提供者3.服务消费者代码链接 https://github.com/lidonglin-bit/cloud 一、Eureka基础知识 1.什么是服务治理 SpringCloud封装了Ne…

金融风控09

迁移学习 为什么要&#xff1f; 源域样本与目标域样本分布有区别&#xff0c;目标域样本量不够 平时建模用的迁移学习场景 1、新开某个消费分期场景样本量少&#xff0c;需要用其他场景的数据建模 2、业务被迫停滞3个月再重启&#xff0c;大部分训练样本比较老旧&#xff…

含分布式光伏的配电网集群划分和集群电压协调控制(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

激光在大气中传输特性

在光纤通信中&#xff0c;单模光纤在波长1.55μm窗口具有巨大的潜在带宽和极低的损耗&#xff0c;传输数字信号的容量已能达到10Tb&#xff0f;s&#xff0c;每信道光源功率仅需1mW左右&#xff0c;无中间放大的距离超过100km。而且&#xff0c;光纤作为光波导&#xff0c;红外…

PostSharp Ultimate添加模式和线程安全

PostSharp Ultimate添加模式和线程安全 PostSharpUltimate允许开发人员通过将重复的工作从人身上转移到机器上&#xff0c;从而消除样板代码。它包含最常见模式的现成实现&#xff0c;并为您提供了为自己的模式构建自动化的工具。开发人员通常根据设计模式进行思考&#xff0c;…