当前位置: 首页 > news >正文

Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行

文章目录

  • Qt QtableWidget表格删除选中行
    • 只能选择一行,点击按钮后,删除一行
    • 可以选择中多行,点击按钮后,删除多行
    • 选中某一列中的不同行,点击按钮后,删除多行
  • QTableWidgetSelectionRange介绍
  • QTableWidget的选择模式

Qt QtableWidget表格删除选中行

只能选择一行,点击按钮后,删除一行

设置

	QTableWidget *tb = ui->tableWidget;tb->setSelectionBehavior(QAbstractItemView::SelectRows);tb->setSelectionMode(QAbstractItemView::SingleSelection);

操作

    QTableWidget *tb = ui->tableWidget;int curRow=tb->currentRow();     //当前行号tb->removeRow(curRow);           //删除当前行及其items

可以选择中多行,点击按钮后,删除多行

设置

    QTableWidget *tb = ui->tableWidget;tb->setSelectionBehavior(QAbstractItemView::SelectRows);tb->setSelectionMode(QAbstractItemView::ExtendedSelection);

操作

	QTableWidget *tb = ui->tableWidget;QItemSelectionModel  *m_selection = tb->selectionModel();QModelIndexList indexList = m_selection->selectedIndexes();QList<int> list;int prev =-1,curr=-1;if(indexList.length()>1){//预处理第一行prev  = indexList.at(0).row();list.append(prev);for(int i=1;i<indexList.length();i++){//qDebug() <<"row: "<< indexList.at(i).row() <<"column: "<<indexList.at(i).column();curr = indexList.at(i).row();if(prev ==curr){continue;}else{prev = curr;list.append(prev);}}}else if(indexList.length()==1){list.append(indexList.at(0).row());}else{return;}//从大到小排序,必须从最后一行  往前删除  不然会打乱顺序std::sort(list.rbegin(),list.rend());//根据填充到的数据 删除选中列for(int j = 0; j <list.size(); j++){int cc = list.at(j);tb->removeRow(cc);           //删除当前行及其items}

选中某一列中的不同行,点击按钮后,删除多行

无需设置setSelectionBehavior(QAbstractItemView::SelectRows),但是可以选择的那一列最好设置为不可编辑。按下Ctrl键,选择多行。

设置1

    tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);//选择模式m_selection = new QItemSelectionModel(m_model,this);           //创建选择模型tableView->setSelectionModel(m_selection); //设置选择模型

设置2

        QStandardItem *item1 = new QStandardItem("aa1");item1->setEditable(false);QStandardItem *item2 = new QStandardItem("aa2");item2->setEditable(false);        QList<QStandardItem *> list = {item1,item2};model->appendRow(list);        

操作

            QModelIndexList indexList = m_selection->selectedIndexes();QList<int> list;int sameColumn=-1;for(int i=0;i<indexList.length();i++){if(i==0){sameColumn=indexList.at(i).column();}//qDebug() <<"row: "<< indexList.at(i).row() <<"column: "<<indexList.at(i).column();if(sameColumn!=indexList.at(i).column()){//上面currentColumnChanged信号其实已经让用户只能选择同一列,这里双重保险qDebug()<<"你的选择有不同列,请务必选择同一列的不同行来进行多行删除操作";return;}list.append(indexList.at(i).row());}//从大到小排序,必须从最后一行  往前删除  不然会打乱顺序std::sort(list.rbegin(),list.rend());//根据填充到的数据 删除选中列for(int j = 0; j <list.size(); j++){int cc = list.at(j);m_model->removeRow(cc);}

QTableWidgetSelectionRange介绍

QTableWidgetSelectionRange是Qt框架中用于表示QTableWidget中选定的一块单元格区域的类。以下是如何使用QTableWidgetSelectionRange的一些常见操作:

  1. 获取当前选定的单元格区域:
QList<QTableWidgetSelectionRange> ranges = tableWidget->selectedRanges();
  1. 获取第一个选定的单元格区域的起始行、起始列、行数和列数:
if (!ranges.isEmpty()) {int startRow = ranges.first().topRow();int startColumn = ranges.first().leftColumn();int rowCount = ranges.first().rowCount();int columnCount = ranges.first().columnCount();
}
  1. 遍历所有选定的单元格区域:
foreach (const QTableWidgetSelectionRange &range, ranges) {int startRow = range.topRow();int startColumn = range.leftColumn();int rowCount = range.rowCount();int columnCount = range.columnCount();// 进行处理...
}
  1. 检查特定的单元格区域是否被选定:
QTableWidgetSelectionRange range(1, 1, 3, 3); // 定义一个起始行为1,起始列为1,行数和列数为3的区域
if (tableWidget->selectedRanges().contains(range)) {// 区域被选定
}
  1. 清除所有选定的单元格区域:
tableWidget->clearSelection();

QTableWidgetSelectionRange类提供了一种方便的方式来处理QTableWidget中的选择区域。使用它可以获取和操作选定的单元格区域,进行相关的处理和操作。

QTableWidget的选择模式

QTableWidget通过setSelectionMode()SelectionBehavior来设置选择模式

enum QAbstractItemView::SelectionBehavior

ConstantValueDescription
QAbstractItemView::SelectItems0Selecting single items.
QAbstractItemView::SelectRows1Selecting only rows.
QAbstractItemView::SelectColumns2Selecting only columns.

enum QAbstractItemView::SelectionMode

此枚举指示视图如何响应用户选择:

ConstantValueDescription
QAbstractItemView::SingleSelection1When the user selects an item, any already-selected item becomes unselected. It is possible for the user to deselect the selected item by pressing the Ctrl key when clicking the selected item.
QAbstractItemView::ContiguousSelection4When the user selects an item in the usual way, the selection is cleared and the new item selected. However, if the user presses the Shift key while clicking on an item, all items between the current item and the clicked item are selected or unselected, depending on the state of the clicked item.
QAbstractItemView::ExtendedSelection3When the user selects an item in the usual way, the selection is cleared and the new item selected. However, if the user presses the Ctrl key when clicking on an item, the clicked item gets toggled and all other items are left untouched. If the user presses the Shift key while clicking on an item, all items between the current item and the clicked item are selected or unselected, depending on the state of the clicked item. Multiple items can be selected by dragging the mouse over them.
QAbstractItemView::MultiSelection2When the user selects an item in the usual way, the selection status of that item is toggled and the other items are left alone. Multiple items can be toggled by dragging the mouse over them.
QAbstractItemView::NoSelection0Items cannot be selected.

相关文章:

Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行

文章目录 Qt QtableWidget表格删除选中行只能选择一行&#xff0c;点击按钮后&#xff0c;删除一行可以选择中多行&#xff0c;点击按钮后&#xff0c;删除多行选中某一列中的不同行&#xff0c;点击按钮后&#xff0c;删除多行 QTableWidgetSelectionRange介绍QTableWidget的选…...

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…...

数学建模--Subplot绘图的Python实现

目录 1.Subplot函数简介 2.Subplot绘图范例1:绘制规则子图 3.Subplot绘图范例2:绘制不规则子图 4.Subplot绘图范例3:gridspec辅助实战1 5.Subplot绘图范例4:gridspec辅助实战2 1.Subplot函数简介 """ 最近在数学建模种需要绘制多张子图,发现对于subplot函…...

JMeter(三十九):selenium怪异的UI自动化测试组合

文章目录 一、背景二、JMeter+selenium使用过程三、总结一、背景 题主多年前在某社区看到有人使用jmeter+selenium做UI自动化测试的时候,感觉很是诧异、怪异,为啥?众所周知在python/java+selenium+testng/pytest这样的组合框架下,为啥要选择jmeter这个东西[本身定位是接口测…...

c++ 移动构造方法为什么要加noexcept

背景: 最近看了候捷老师的c的教程, 他说移动构造方法要加noexcept, 在vector扩容的时候, 如果有移动构造方法没有加noexcept,是不会调用的. 个人感觉有些神奇, 这就去查下一探究竟. 过程: 测试代码如下: #include <iostream> #include <vector> struct A {A(){s…...

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…...

手把手教你搭建园林园艺小程序商城

现如今&#xff0c;随着互联网的快速发展&#xff0c;小程序成为了企业和个人展示产品和服务的新方式。在园林园艺行业&#xff0c;构建一个园林园艺小程序能够更好地推广和销售自己的产品和服务。那么&#xff0c;如何构建一个园林园艺小程序呢&#xff1f;下面我们来详细介绍…...

Java Iterator(迭代器)

Java迭代器&#xff08;Iterator&#xff09;是 Java 集合框架中的一种机制&#xff0c;是一种用于遍历集合&#xff08;如列表、集合和映射等&#xff09;的接口。 它提供了一种统一的方式来访问集合中的元素&#xff0c;而不需要了解底层集合的具体实现细节。 Iterator 是 …...

Logstash同步MySQL数据到ElasticSearch

当MySQL数据到一定的数量级&#xff0c;而且索引不能实现时&#xff0c;查询就会变得非常缓慢&#xff0c;所以使用ElasticSearch来查询数据。本篇博客介绍使用Logstash同步MySQL数据到ElasticSearch&#xff0c;再进行查询。 测试环境 Windows系统MySQL 5.7Logstash 7.0.1El…...

【C++】运算符重载的示例实现和应用

C运算符重载的格式&#xff1a; operator 运算符 比如要重载 ! 运算符 &#xff1a; operator ! 下面是一个例子&#xff1a; class DemoText{DemoText(string str, int num){m_text str; m_number num;}string m_text;int m_number; }这里来定义两个对象&#xff1a;…...

Kubernetes禁止调度

在Kubernetes中&#xff0c;您可以通过几种方式来禁止某个Pod调度到节点上。以下是一些方法&#xff1a; Node Selector&#xff1a;您可以使用Node Selector来限制Pod只能调度到带有特定标签的节点上。如果您希望完全禁止Pod调度到某些节点上&#xff0c;可以确保这些节点不拥…...

CocosCreator3.8研究笔记(七)CocosCreator 节点和组件的介绍

相信很多新手朋友&#xff0c;肯定会问&#xff0c;CocosCreator 中什么是节点&#xff1f;什么是组件&#xff1f; 一、什么是组件&#xff08;Component&#xff09;&#xff1f; Cocos Creator 3.8 的工作流程是以组件式开发为核心&#xff0c;即以组合而非继承的方式进行游…...

Ceph入门到精通-C++入门知识点

C中的双冒号(::)是作用域分解运算符&#xff08;scope resolution operator&#xff09;。 它主要有以下两种用法&#xff1a; 用于区分同名的不同成员&#xff0c;例如在不同类中声明了同名的成员函数或成员变量&#xff0c;可以使用A::B的方式来特指A类的B成员。当全局变量…...

Ansible之playbook详解和应用实例

目录 一、playbook简介 1.什么是playbook 2.playbook组成 二、应用实例 1.使用playbook安装启用httpd服务 2.使用playbook安装启用nginx服务 三、ansible-playbook其他用法 1.检查yaml文件的语法是否正确 2.检查tasks任务 3.检查指定的主机 4.指定从某个task开始运行…...

经验萃取方法

【经验萃取】 经验萃取不是简单的总结提炼归纳&#xff01; 经验萃取需经过还原、复盘分析、萃取重构 一.经验萃取前三个准备 1.定主题&#xff1a; 萃取主题选择&#xff08;阐述原因、确定级别、差距/问题是源头&#xff09;->多维评分&#xff1a;普遍性、重要性、迫切…...

手写apply方法

<script>/** 手写apply方法 * */Function.prototype.myApply function (context, args) {console.log(this, sss)//fnconst key Symbol()context[key] thiscontext[key](...args)delete context[key]return context[key]}const obj {name: zs,age: 18}function fn …...

Jenkins实现基础CD操作

操作截图 在Jenkins里面设置通过标签进行构建 在Jenkins中进入项目&#xff0c;配置以下 将execute shell换到invoke top-level maven targets之前 在gitlab中配置标签 代码迭代新的版本 项目代码迭代 修改docker-compose.yml 提交新版本的代码 在Jenkins中追加新…...

开源软件合集(Docker)

Docker安装 1.安装命令&#xff1a;curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.启动&#xff1a;systemctl start docker3.停止&#xff1a;systemctl stop docker4.重启&#xff1a;systemctl restart docker5.开机启动&#xff1a;systemctl enab…...

Ceph入门到精通-生产日志级别设置

Ceph 子系统及其日志记录级别的信息。 了解 Ceph 子系统及其日志记录级别 Ceph 由多个子系统组成&#xff1a; 每个子系统都有其日志记录级别&#xff1a; 默认情况下存储在 /var/log/ceph/ 目录中的输出日志&#xff08;日志级别&#xff09;存储在内存缓存中的日志&#…...

16-MyCat

一 Mycat概述 1 什么是Mycat 什么是Mycat Mycat是数据库中间件&#xff0c;所谓数据库中间件是连接Java应用程序和数据库中间的软件。 为什么要用Mycat 遇到问题&#xff1a; Java与数据库的紧耦合高访问量高并发对数据库的压力读写请求数据不一致 2 Mycat与其他中间件区别 目…...

2026年OPPO迎来“大年”:影像、折叠屏、IoT等多领域突破,高端化版图持续扩张

2026年4月21日&#xff0c;OPPO在成都举办新品发布会&#xff0c;发布Find X9s Pro和Find X9 Ultra。这一年OPPO在多个领域取得重大进展&#xff0c;迎来发展“大年”。旗舰影像&#xff1a;定义下一代移动影像移动影像是OPPO长期投入的领域&#xff0c;2026年收获颇丰。Find X…...

RK3588驱动编译踩坑记:手把手教你解决‘-Werror’导致的‘all warnings being treated as errors’

RK3588驱动编译实战&#xff1a;从-Werror报错到内核构建优化的完整指南 当你在深夜的调试灯光下&#xff0c;面对RK3588开发板驱动编译失败的红字报错&#xff0c;那种挫败感每个嵌入式开发者都深有体会。特别是当错误提示"cc1: all warnings being treated as errors&qu…...

别光刷题!用蓝桥杯C/C++真题“七段数码管”和“合并检测”,教你提升编程思维

蓝桥杯C/C真题精讲&#xff1a;从"七段数码管"到"合并检测"的思维跃迁 在编程竞赛的征途上&#xff0c;许多学习者陷入了一个常见误区——把刷题简单等同于看答案和记忆解法。这种机械式的训练往往事倍功半&#xff0c;就像试图通过临摹字帖来学习创作诗歌…...

给5G核心网网元起外号:AMF是‘前台’,UPF是‘快递员’,这样理解就对了

5G核心网网元趣味解读&#xff1a;当技术术语变身职场角色 刚接触5G核心网时&#xff0c;面对AMF、SMF、UPF这些缩写字母组合&#xff0c;很多人会感到一头雾水。其实&#xff0c;这些看似冰冷的专业术语&#xff0c;完全可以对应到我们熟悉的职场角色。让我们用拟人化的方式&a…...

i.MX6平台Linux下GOODIX GT657X触摸驱动移植保姆级教程(含设备树配置与常见问题排查)

i.MX6平台Linux下GOODIX GT657X触摸驱动移植实战指南 在嵌入式Linux开发中&#xff0c;触摸屏驱动的移植是连接硬件与用户体验的关键环节。本文将针对i.MX6处理器平台&#xff0c;详细解析GOODIX GT657X系列触摸芯片的驱动移植全过程&#xff0c;从设备树配置到内核编译&#x…...

N_m3u8DL-CLI-SimpleG:终极M3U8视频下载图形界面工具完整指南

N_m3u8DL-CLI-SimpleG&#xff1a;终极M3U8视频下载图形界面工具完整指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 在当今数字媒体时代&#xff0c;M3U8视频下载已成为许多…...

告别静态桌面!用LVGL给ESP32小屏幕玩出花:动态天气图标+可切换表盘实战

告别静态桌面&#xff01;用LVGL给ESP32小屏幕玩出花&#xff1a;动态天气图标可切换表盘实战 在嵌入式开发领域&#xff0c;ESP32凭借其出色的性能和丰富的功能&#xff0c;已成为物联网项目的首选平台之一。而当我们为这些项目添加用户界面时&#xff0c;LVGL&#xff08;Lig…...

STC15单片机串口通信实战:从零配置到用printf优雅调试(附完整工程)

STC15单片机串口通信实战&#xff1a;从零配置到用printf优雅调试 1. 硬件准备与环境搭建 STC15W408AS作为一款增强型51内核单片机&#xff0c;其串口功能在物联网终端、工业控制等场景中应用广泛。我们先从硬件连接开始&#xff1a; 典型串口硬件配置清单&#xff1a; STC15W4…...

3步掌握ReTerraForged地形引擎:打造你的专属Minecraft世界

3步掌握ReTerraForged地形引擎&#xff1a;打造你的专属Minecraft世界 【免费下载链接】ReTerraForged TerraForged for modern MC versions 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged 想要在Minecraft中告别千篇一律的地形&#xff0c;创建令人惊叹的…...

EF Core 10 Vector Search扩展正式发布后,92%开发者踩中的5个语义检索陷阱及修复代码模板

第一章&#xff1a;EF Core 10 Vector Search扩展概述与核心价值 EF Core 10 Vector Search 扩展是微软官方在 Entity Framework Core 10 中引入的首个原生向量搜索支持模块&#xff0c;旨在将语义检索能力深度集成至 ORM 层。它并非独立 SDK&#xff0c;而是通过 Microsoft.En…...