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

news2024/11/28 14:41:49

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按键,看帮助文档,这个靠谱

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

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

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

相关文章

OpenVINS学习5——VioManager.cpp/h学习与注释

前言 之前又看到说VioManager.cpp/h是OpenVINS中的核心程序&#xff0c;这次就看看这里面都写了啥&#xff0c;整体架构什么样&#xff0c;有哪些函数功能。具体介绍&#xff1a; VioManager类 整体分析 VioManager类包含 MSCKF 工作所需的状态和其他算法。我们将测量结果输…

二维码地址门牌管理系统:物业管理的未来趋势

文章目录 前言一、数字化管理与便捷服务二、身份认证与安全保障三、业主便利与贴心服务四、未来发展趋势 前言 在数字化时代&#xff0c;物业管理面临着不断增加的挑战。为了提高管理效率、服务业主&#xff0c;二维码门牌管理系统应运而生。本文将探讨这一新型管理方式&#…

【OpenBMC】的内部README 模板

OpenBMC 本项目的AST2500分支核心代码的机型是ast2500-default&#xff0c;克隆代码后进入编译环境的命令为&#xff1a; source setup ast2500-default 一、源码下载、配置以及编译 重要&#xff1a;请参阅confluence 详细步骤 二、代码使用方法 目前所有自定义修改的代码…

虚拟机添加显示屏

1、关闭虚拟机&#xff0c;虚拟机在为关机的情况下&#xff0c;虚拟机设置->显示器->监视器 都是灰色的&#xff0c;不能设置&#xff1b; 2、虚拟机设置->显示器->监视器 “监视器数量” 设置为2 “拉伸模式” 不要勾选 点确定 3、点击 查看->循环使用多个…

蜥蜴目标检测数据集VOC格式1400张

蜥蜴&#xff0c;一种爬行动物&#xff0c;以其独特的形态和习性&#xff0c;成为了人们关注的焦点。 蜥蜴的外观多样&#xff0c;体型大小不一。它们通常拥有长条的身体、四肢和尾巴&#xff0c;鳞片覆盖全身&#xff0c;这使得它们能够在各种环境中轻松移动。大多数蜥蜴拥有…

深度学习 | 多模态算法

AIGC也就是AI内容生成已经成为新一轮人工智能发展的热点和必然趋势&#xff0c;它使得大规模高质量的创作变得更加容易。 一 、InstructGPT模型 1、GPT系列回顾 chatGPT和InstructGPT都使用了指示学习和基于人工反馈的强化学习来指导模型的训练&#xff0c;不同点仅仅是在采集数…

计算机视觉技术-单发多框检测(SSD)

单发多框检测&#xff08;SSD&#xff09;&#xff08;Liu et al., 2016&#xff09;。 该模型简单、快速且被广泛使用。尽管这只是其中一种目标检测模型&#xff0c;但本节中的一些设计原则和实现细节也适用于其他模型。 下图描述了单发多框检测模型的设计。 此模型主要由基础…

GitHub项目推荐:IDE-3D

项目地址 GitHub - MrTornado24/IDE-3D: [SIGGRAPH Asia 2022] IDE-3D: Interactive Disentangled Editing For High-Resolution 3D-aware Portrait Synthesisx 项目简述 这是一个交互式的3D画图工具。无论是改图还是成图&#xff0c;都能使用。是一个很有意思的项目。 项目…

2024,清洁家电卷向“全、智、廉、拓”与“出海”

文 | 智能相对论 作者 | 佘凯文 岁末&#xff0c;又到了一年一度盘点全年、筹划未来的重要节点。在今年经济大环境整体趋向稳定的背景中&#xff0c;许多行业都交还算过得去的成绩单&#xff0c;清洁家电正是其中一员。 特别是在整体家电大环境依旧严峻的前提下&#xff0c;…

Leetcode算法系列| 11. 盛最多水的容器

目录 1.题目2.题解C# 解法一&#xff1a;暴力C# 解法二&#xff1a;双指针&#xff08;左指针大于右指针&#xff0c;left&#xff09;C# 解法三&#xff1a;双指针优化&#xff08;左指针小于等于最小高度&#xff0c;left&#xff09;Java 解法一&#xff1a;双指针Python3 解…

xshell设置终端类型为xterm-256color (解决oh-my-tmux颜色失真问题)

文章目录 问题描述解法效果检验 问题描述 在xshell远程连接服务器时&#xff0c;tmux色彩有问题&#xff08;tmux配置为Oh my tmux&#xff09;&#xff0c;如下&#xff1a; 这色彩明显是8位的色彩。 现在终端的标配就是类型为 xterm-256color&#xff0c;其支持256位的真彩…

Maven简介及环境搭建和基本使用(Java开发中的实用工具)

一、概述 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它 用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、 测试、打包和发布等工作。 Maven的相关概念 pom.xml文件&#xff1a;里面可以配置相关信息&#xff0c;指导ma…

第一课:Transformer

第一课&#xff1a;Transformer 文章目录 第一课&#xff1a;Transformer1、学习总结&#xff1a;什么是语言模型&#xff1f;大语言模型&#xff08;LLM&#xff09;技术演变史注意力机制Transformer结构课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、…

内联函数的作用

目的 主要为了提升程序运行速度。 分析 当程序调用一个函数时&#xff0c;程序暂停执行当前指令&#xff0c;跳到函数体处执行&#xff0c;在函数执行完后&#xff0c;返回原来的位置继续执行。如果该函数为内联函数&#xff0c;则不需跳&#xff0c;是因为该内联函数直接插…

Python开发GUI常用库PyQt6和PySide6介绍之四:开发示例

Python开发GUI常用库PyQt6和PySide6介绍之四&#xff1a;开发示例 Python开发GUI常用库PyQt6 和 PySide6 介绍系列&#xff0c;已发表的&#xff1a; 之一&#xff1a;简介与安装https://blog.csdn.net/cnds123/article/details/135069944 之二&#xff1a;设计师&#xff0…

python的初识(print+intput函数和变量的基本运用)

#主页传送&#xff1a;江南的江 #每日鸡汤&#xff1a;你要知是非以不辩为解脱&#xff0c;烦恼以忍辱为智慧&#xff0c;办事以尽力为有功&#xff0c;处人以真诚为品格。做人的方略是&#xff1a;把好自己的口&#xff0c;明了心中的事&#xff0c;干好手里的活&#xff0c;走…

鸿蒙 Ark Ui UIAbility组件生命周期

前言&#xff1a; 各位同学有段时间没有见面 因为一直很忙所以就没有去更新博客。最近有在学习这个鸿蒙的ark ui开发 因为鸿蒙不是发布了一个鸿蒙next的测试版本 明年会启动纯血鸿蒙应用 所以我就想提前给大家写一些博客文章 今天要讲的是生命周期&#xff1a; 效果图 &#…

连续分配管理方式-第四十三天

目录 前言 单一连续分配 固定分区分配 分区大小相等 分区大小不等 分区说明表 动态分区分配 问题 用什么样的数据结构记录内存的使用情况 应该选择哪个分区进行分配 分区的分配与回收操作 分配 回收 结论 本节思维导图 前言 连续分配指为用户进程分配的必须是一…

大数据计算基础真题回忆

转载学长20 21的真题 转载链接 注&#xff1a;每年的课件可能会有更改&#xff0c;内容不一样&#xff0c;所以读者复习的时候以所在年份的课件为准 2020 ​ 2021 笔者2023秋 2023 都是大题&#xff0c;没有选择题。 改进的近似算法中&#xff0c;结合具体的例子说明&am…

《3D数学基础-图形和游戏开发》阅读笔记 | 3D数学基础 (学习中 1.4更新)

文章目录 3D数学基础矢量/向量概述 - 什么是向量单位矢量&#xff1a;只关注方向不关注大小 数学运算矢量的加法与减法减法的几何意义计算一个点到另一个点的位移矢量的点积与叉积 矩阵方阵几何意义 - 表示空间坐标的变换 3D数学基础 矢量/向量 在笔记中 变量使用小写字母表…