Qt学习_17_一些关于QTableWidget的记录

2024-01-04

1 QTableWidget::clear() 程序异常退出

近日,项目中使用到QTableWidget,遇到一个问题,项目需要清空这个表格,但是无论调用clear(),clearContents(),程序都报:程序异常退出。 而且项目程序还比较多,最开始还没办法一步定位到是调用QTableWidget的clear()函数导致的崩溃。甚至都不知道是QTableWidget出了问题,所以需要一步一步定位,我的定位方法是:

代码1
qDebug() << "测试点1";
代码2
qDebug() << "测试点2";
代码3
qDebug() << "测试点3";
代码4
qDebug() << "测试点4";
代码5
qDebug() << "测试点5";
代码6
qDebug() << "测试点6";
代码7
qDebug() << "测试点7";
...

原理很简单,如果 代码几 的运行是正常的, 那么程序输出界面就会打印 测试点几 ,反正, 代码几 就是不正常的。我用这个方法定位到是调用了QTableWidget clear()函数导致的崩溃。  我估计是因为我在QTableWidget插入了【自定义控件/非标准的控件】作为元素了,然后我尝试用clearContents(), remove*(),各种函数来清空这个表格。 但是全都会导致崩溃,报 程序异常退出 。 网上也查了一些资料,也不管用。 最后我抱着试一试的心态,调用了QTableWidget的reset()函数,问题解决了,但是我也不知道为什么,没有深究。 这里把代码简单记录一下

// 清空表格
m_fs_formula_array.clear(); // 此向量保存插入表格的非标准控件(公式控件,以后会讲) 
    
// 根据行数和列数把每个单元格的控件删除
for(int i = 0; i < ui->tableWidget->rowCount();i++)
{
    for(int j = 0; j < ui->tableWidget->columnCount();j++){
        ui->tableWidget->removeCellWidget(i,j);
    }
}
ui->tableWidget->reset(); // 这句很关键,就这个reset顶用了
ui->tableWidget->clear();

2 QTableWidget 好用的信号函数

写代码的时候怎么识别这个函数是个信号函数呢,我偶然发现

上图红框框中的这种函数,就是信号函数,很形象的图标。

项目中,我有两个需求,就是当我选中某一行的时候,我需要做某些操作。 当我双击修改了某一行的内容之后,我需要做一些操作。  这两个事件,其实 QTableWidget早就已经为你考虑过了,这两种事件,它都会发送信号。 因此我们可以将这个信号连接到槽函数处理。

选中某行-程序1

// 选中某行
connect(ui->tableWidget,&QTableWidget::itemSelectionChanged,this,[=](){
    // 选中的单元格
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    // 获取选中的行   
    int row = ui->tableWidget->row(items.at(0));
    // 获取(row,i)处的单元格    
    QTableWidgetItem* item = ui->tableWidget_dataselect->item(row,0);    
    // 获取单元格文本
    QString itemstr= item->text();
        
    // use row | itemstr  do something
});

选中某行-程序2

// 选中某行
connect(ui->tableWidget,&QTableWidget::itemSelectionChanged,this,[=](){
    // 获取选中行
    QList<QTableWidgetSelectionRange> ranges = ui->tableWidget->selectedRanges();
    int row = ranges.at(0).topRow();
    // use row do sth.
});

修改表格事件

connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), \ 
this, SLOT(slot_namechanged(int, int)));

这个槽函数slot_namechanged(int, int)需要在.h文件中去声明,.cpp文件中去定义。

3 QTableWidget 常用代码

// 隐藏垂直的表头
ui->tableWidget->verticalHeader()->setVisible(false);
// 隐藏水平的表头
ui->tableWidget->horizontalHeader()->setVisible(false);
// 垂直方向铺满
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

// 清空表格
ui->tableWidget->clear();
// 设置表格的行数和列数
ui->tableWidget->setColumnCount(1);
ui->tableWidget->setRowCount(0);

// 设置被选中的背景色
ui->tableWidget->setStyleSheet("selection-background-color:#FA8072");

int rown;
int i;
for(i = 0;i<m_strPathList.count(); i++)
{
    // 获得当前表格的行数
    rown = ui->tableWidget->rowCount();
    // 在最后一行插入一行
    ui->tableWidget->insertRow(rown);
    // 设置 第rown+1行,1列的内容
    ui->tableWidget->setItem(rown, 0, new QTableWidgetItem(m_strNameList[i]));
    // 设置内容居中
    ui->tableWidget->item(rown, 0)->setTextAlignment(Qt::AlignCenter);
}

// 代码来选中某行
ui->tableWidget_dataselect->selectRow(rown);
QLabel* widget = new QLabel(); 
// 对这个widget一顿操作
ui->tableWidget->setRowHeight(rown, 200);   // 设置行高
ui->tableWidget->setCellWidget(rown, 0, widget); // 设置表格元素为某个控件

其实QTableWidget的相关知识,还是选中QTableWidget, 双击F1按键,看帮助文档 ,这个靠谱

最后愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt学习_17_一些关于QTableWidget的记录 的相关文章

随机推荐

  • 智康护居家养老服务上门介绍

    近年来 我国老龄化进程不断加速 养老服务成为社会关注的热点之一 居家养老服务上门作为养老服务的一项重要服务方式 受到越来越多老人和家庭的青睐 居家养老服务上门分为生活照料 基础照护 健康管理 探访服务等几个方面 下面我们就来详细介绍它们 生
  • css学习之路:sass学习基础篇

    SCSS 一 动态的样式语言 让CSS有变量的概念 css有很多的缺点 语法不够强大 没有变量和合理的样式复用机制 导致难以维护 我们就可以使用动态样式语言 赋予CSS新的特性 常见的动态样式语言 scss sass scss兼容sass
  • 设计创新,流程优化:3D开发HOOPS在数字化工厂中的多面应用

    随着科技的不断发展 数字化转型已经成为各行各业的共同趋势 而工业领域也不例外 在这一浩大的变革浪潮中 Tech Soft 3D的 HOOPS 正以其卓越的性能和多功能性 成为数字化工厂领域的关键推动力 数字化工厂概述 数字化工厂是指通过将传
  • Ontrack EasyRecovery(易恢复中国)2024专业数据文件恢复软件

    Ontrack EasyRecovery 易恢复中国 是全球著名数据厂商Kroll Ontrack出品的一款专业数据文件恢复软件 EasyRecovery数据恢复软件支持恢复不同存储介质数据 硬盘 光盘 U盘 移动硬盘 数码相机 RAID磁
  • CSS学习之路: 基础学习篇

    css基础 一 css3 概述 1 1 什么是css Cascading style sheets 层叠样式表 级联样式表 简称样式表 1 2 css作用 对页面中html元素进行美化 1 3 HTML和css的关系 HTML 负责页面结构
  • LeetCode-数组-双指针-中等难度

    文章目录 双指针 1 删除有序数组中的重复项 入门 1 1 题目描述 1 2 解题思路 1 3 代码实现 2 删除有序数组中的重复项 II 简单
  • 时间序列平稳性相关检验方法

    理解平稳性 一般来说 平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列 特别是在均值和方差方面 平稳性可能是一个比较模糊的概念 将序列排除为不平稳可能比说序列是平稳的更容易 通常不平稳序列有几个特征 平均值随时间推移发生变化
  • 内网穿透常用方法系列总结

    前言 在内网渗透时 一个WebShell或CobaltStrike Metasploit上线等 只是开端 更多是要内网横向移动 扩大战果 打到核心区域 但后渗透的前提是需要搭建一条通向内网的 专属通道 才能进一步攻击 可实战中因为网络环境不
  • 智康护智慧养老院建设之养老院护工的排班系统

    智康护是一种针对养老院护工的排班系统 主要目的是优化养老院护工的排班管理 提高护工工作效率并降低工作负担 下面从排班调休 人员定位 排班班次和工单申请等几个方面来阐述智康护的功能 排班调休 智康护系统可以根据养老院的护工资源和护理需求 智能
  • iOS手机查看蓝牙底层日志

    文章目录 一 需要的环境 二 在iOS设备上安装Profiles文件 三 安装Xcode 四 安装packetLogger 五 启动蓝牙数据包分析 参考文档 A New Way to Debug iOS Bluetooth Applicat
  • 用友签约新奥集团,共建智慧资产管理平台

    近日 用友成功签约新奥集团数智资产项目 项目将以数据驱动 资产创值为牵引 将全集团所有板块的资产数据按照标既定模型全面可视化展示 通过数据分析 模型沉淀 智能识别低效闲置资产 预警 赋能资产处置 盘点等事项形成处理闭环 通过数智驱动处置等活
  • 振弦采集仪在地基沉降监测中的应用研究

    振弦采集仪在地基沉降监测中的应用研究 振弦采集仪是一种专门用于测量地基沉降的仪器 它采用振弦原理来测量地基的沉降情况 振弦采集仪通过在地基上安装一根细长的弹性振弦 并测量振弦的变形来获得地基沉降的数据 在地基沉降监测中 振弦采集仪可以提供精
  • promethues grafana 安装和使用

    文章目录 1 promethues安装 2 node exporter安装 3 grafana安装 4 配置promethues监控node节点 5 grafana操作 外传 Docker 镜像下载地址 https hub docker c
  • uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -小程序端TabBar搭建

    锋哥原创的uniapp微信小程序投票系统实战 uniapp微信小程序投票系统实战课程 SpringBoot2 vue3 2 element plus 火爆连载更新中 哔哩哔哩 bilibili uniapp微信小程序投票系统实战课程 Spr
  • LONGQLORA: EFFICIENT AND EFFECTIVE METHOD TO EXTEND CONTEXT LENGTH OF LARGE LANGUAGE MODELS

    本文是LLM系列文章 针对 LONGQLORA EFFICIENT AND EFFECTIVE METHOD TO EXTEND CONTEXT LENGTH OF LARGE LANGUAGE MODELS 的翻译 LONGQLORA 扩
  • 新规施行推动数据资产化迈出关键一步

    经济参考报 1月2日刊发文章 新规施行推动数据资产化迈出关键一步 文章称 2024年1月1日起 企业数据资源相关会计处理暂行规定 下称 暂行规定 正式施行 暂行规定 明确数据资源的确认范围和会计处理适用准则等 业内人士表示 这是推动数据资产
  • PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

    目录 一 ECP5701 二 FS312A 三 CH221K 四 HUSB238 五 AS225KL 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子 从开始的1
  • 智康护智慧养老院建设之智慧视频联动解决方案

    智康护智慧养老院建设之智慧视频联动解决方案是一种基于智能技术和视频监控的创新解决方案 旨在提升养老院的安全管理和服务质量 通过视频联动实现智能化的监控和应急响应 建设背景 随着人口老龄化问题的日渐严重 养老院作为提供长期照护和安居服务的场所
  • 程序员思维——四个思考原则

    一 什么是四个思考原则 以终为始 确定好真实目标 任务分解 找到实施路径 沟通反馈 解决与人打交道出现的问题 自动化 解决与机器打交道出现的问题 二 如何运用思考框架 运用这个思考框架 我们需要问自己一些问题 Where are we 我们
  • Qt学习_17_一些关于QTableWidget的记录

    1 QTableWidget clear 程序异常退出 近日 项目中使用到QTableWidget 遇到一个问题 项目需要清空这个表格 但是无论调用clear clearContents 程序都报 程序异常退出 而且项目程序还比较多 最开始