解决嵌入式中QTableWidget双击出现空白QTableWidgetItem输入

目录

  • 所说BUG现象
  • 解决
    • 方式1
    • 方式2
    • 全部内容
  • 效果

今天突然想起在上个公司解决的一个BUG

嵌入式中QTableWidget一般只能看数据不能编辑,或者是选择
所以双击出现空白QTableWidgetItem是不允许的

所说BUG现象

在这里插入图片描述

解决

在空白的单元格中,添加不可编辑的QTableWidgetItem

方式1不用遍历,在ItemMaxNum处开始添加
方式2遍历,在空白的单元格处开始添加

方式1

  • 主要内容
 //如果QTableWidgetItem个数不是3的倍数,最后一行没有满,布局会自动补充一个空白控件,多次点击才能出现
if(ItemMaxNum%Column!=0&&(i+1)==ItemMaxNum)
{// 设置空白项的文本为 ""for(int k = (ItemMaxNum%Column); k < table->columnCount(); k++) {QTableWidgetItem* item = new QTableWidgetItem("");item->setFlags(item->flags() ^ Qt::ItemIsEditable);table->setItem(table->rowCount() - 1, k, item);}
}

方式2

  • 主要内容
if(ItemMaxNum!=Row*Column)
{for (int row = 0; row < Row; row++) {for (int col = 0; col < Column; ++col) {auto item = table->cellWidget(row,col); //灵活变通:table->item(int row, int column)if(item==nullptr){QTableWidgetItem* items = new QTableWidgetItem("");items->setFlags(items->flags() ^ Qt::ItemIsEditable);table->setItem(row, col, items);}}}
}

全部内容


#include "testbug.h"
#define Column 3
#define Row 6
#define ItemMaxNum 16
TestBug::TestBug(QWidget *parent): QWidget(parent)
{//窗口将始终显示在其他窗口之上this->setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint);this->setFixedSize(800,600);QTableWidget *table = new QTableWidget;table->horizontalHeader()->hide();table->verticalHeader()->hide();table->horizontalHeader()->setStretchLastSection(true);table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);table->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);table->setFocusPolicy(Qt::NoFocus); // 去除选中虚线table->setSelectionMode(QAbstractItemView::NoSelection);table->setStyleSheet("QTableWidget{gridline-color:white;background:DeepSkyBlue; border:0px solid #ffffff;border-bottom-width:0px;border-right-width:0px;}");table->setColumnCount(Column);table->setRowCount(Row);table->setShowGrid(false);QHBoxLayout *hboxLayout = new QHBoxLayout(this);hboxLayout->addWidget(table);int row =0,col=0;for (int i = 0; i < ItemMaxNum; i++) {col = i;if (col >= Column){if (col % Column == 0){row++;}col %= Column;}QString style = QString("QPushButton[status=\"1\"]{font-size:28px;background-color:transparent;color:rgb(255,255,255);border-radius:10;border:2px solid white;}""QPushButton[status=\"2\"]{background-color:rgb(255,255,255);font-size:28px;color:#06411B;border-radius:10;border:2px solid white;}");QWidget *pbtnWidget = new QWidget;QHBoxLayout *pbtnLayout = new QHBoxLayout;QPushButton *pBtn = new QPushButton(QString::fromLocal8Bit("[%1]号").arg(i), pbtnWidget);pbtnLayout->addWidget(pBtn);pbtnWidget->setLayout(pbtnLayout);pBtn->setFixedSize(QSize(185, 50));pBtn->setProperty("status", "2");pBtn->setStyleSheet(style);pBtn->setFocusPolicy(Qt::NoFocus);pBtn->setObjectName(QString::number(i));table->setCellWidget(row, col, pbtnWidget);//如果QTableWidgetItem个数不是3的倍数,最后一行没有满,布局会自动补充一个空白控件,多次点击才能出现
#if 0// 方式1if(ItemMaxNum%Column!=0&&(i+1)==ItemMaxNum){// 设置空白项的文本为 ""for(int k = (ItemMaxNum%Column); k < table->columnCount(); k++) {QTableWidgetItem* item = new QTableWidgetItem("");item->setFlags(item->flags() ^ Qt::ItemIsEditable);table->setItem(table->rowCount() - 1, k, item);}}
#endifconnect(pBtn, SIGNAL(clicked()), this, SLOT(onBtnClick()));}//方式2if(ItemMaxNum!=Row*Column){for (int row = 0; row < Row; row++) {for (int col = 0; col < Column; ++col) {auto item = table->cellWidget(row,col); //灵活变通:table->item(int row, int column)if(item==nullptr){QTableWidgetItem* items = new QTableWidgetItem("");items->setFlags(items->flags() ^ Qt::ItemIsEditable);table->setItem(row, col, items);}}}}
}TestBug::~TestBug()
{
}void TestBug::onBtnClick()
{QPushButton *pBtn = qobject_cast<QPushButton *>(QObject::sender());if (pBtn!=nullptr){qDebug()<<pBtn->text()<<" ObjectName ="<<pBtn->objectName();if (1 == pBtn->property("status").toInt())pBtn->setProperty("status", "2");elsepBtn->setProperty("status", "1");pBtn->setStyleSheet(pBtn->styleSheet());}
}

效果

  • QTableWidget双击出现空白QTableWidgetItem不再会出现输入

在这里插入图片描述

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

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

相关文章

数字孪生:未来科技的新前沿

数字孪生作为一项新兴的研究方向&#xff0c;正逐渐成为科技界的焦点。它是将现实世界中的实体、系统或过程通过数字化手段进行建模、仿真和分析&#xff0c;形成与实体相对应的数字化副本。数字孪生的发展为我们带来了无限的想象空间&#xff0c;以及解决现实问题的新途径。 在…

Zabbix监控安装grafana并配置图形操作

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; Zabbix监控安装grafana 目录 安装并配置grafana 一、安装Grafana 二、下载安装插件 三、配置grafana 四、Web访问并配置&#xff1a; 安装并配置grafana 一、安装Graf…

【团队协作开发】将Gitee项目导入到本地IDEA中出现根目录不完整的问题解决(已解决)

前言&#xff1a;在团队协作开发过程中&#xff0c;通常我们的Gitee完整项目中会包含很多内容&#xff1a;后端代码、前端代码、项目结构图、项目文档等一系列资产。 将Gitee项目导入到本地IDEA中&#xff0c;通常会出现根目录不完整的问题。这是因为项目里面包含了后端代码、前…

基于Java+SpringBoot+vue前后端分离甘肃非物质文化网站设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

DAY51:动态规划(十五)买卖股票最佳时机Ⅲ+买卖股票最佳时期Ⅳ

文章目录 123.买卖股票最佳时机Ⅲ&#xff08;注意初始化&#xff09;思路DP数组含义递推公式初始化遍历顺序最开始的写法&#xff1a;初始化全部写成0debug测试&#xff1a;解答错误&#xff0c;第0天实际上是对应prices[0]和dp[0] 完整版总结 188.买卖股票最佳时机Ⅳ思路DP数…

09.计算机网络——套接字编程

文章目录 网络字节序socket编程socket 常见APIsockaddr结构 UDP编程创建socket绑定socketsendto发送数据recvform接收数据关闭socket TCP编程创建socket绑定socketlisten监听套接字accept服务端接收连接套接字connect客户端连接套接字send发送数据recv接收数据关闭socket 工具n…

【flink】ColumnarRowData

列式存储 在调试flink读取parquet文件时&#xff0c;读出来的数据是ColumnarRowData&#xff0c;由于parquet是列式存储的文件格式&#xff0c;所以需要用一种列式存储的表示方式&#xff0c;ColumnarRowData就是用来表示列式存储的一行数据&#xff0c;它包含多个数组的数据结…

从电商指标洞察到运营归因,只需几句话?AI 数智助理准备好了!

Lily 是名入职不久的电商运营助理&#xff0c;最近她想要根据 2022 年的客单价情况&#xff0c;分析品牌 A 在不同电商渠道的用户行为和表现&#xff0c;并提供一些有价值的洞察和建议给客户。然而在向技术人员提报表需求后&#xff0c;技术人员以需求排满为借口拒绝了。 Lily …

5分钟,结合 LangChain 搭建自己的生成式智能问答系统

伴随大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;的涌现&#xff0c;人们发现生成式人工智能在非常多领域具有重要意义&#xff0c;如图像生成&#xff0c;书写文稿&#xff0c;信息搜索等。随着 LLM 场景的多样化&#xff0c;大家希望 LLM 能在垂直…

记一次容器环境下出现 Address not available

作者&#xff1a;郑明泉、余凯 困惑的源地址 pod 创建后一段时间一直是正常运行&#xff0c;突然有一天发现没有新的连接创建了&#xff0c;业务上是通过 pod A 访问 svc B 的 svc name 的方式&#xff0c;进入 pod 手动去 wget 一下&#xff0c;发现报错了 Address not avai…

jar 更新 jar包内的 class,以及如何修改class

一、提取Jar 内文件 #提取jar内的配置文件jar -xvf a.jar META-INF\plugin.xml-已解压: META-INF/plugin.xml#提取jar内的class文件&#xff0c; 提示&#xff1a;反编译为java文件&#xff0c;修改后再使用javac xxx.java编译为class&#xff0c;jar -xvf a.jar io.config.**…

单例模式类设计|什么是饿汉模式和懒汉模式

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

在Vue-Element中引入jQuery的方法

一、在终端窗口执行安装命令 npm install jquery --save执行完后&#xff0c;npm会自动在package.json中加上jquery 二、在main.js中引入&#xff08;或者在需要使用的页面中引入即可&#xff09; import $ from jquery三、使用jquery

【Ansible 自动化配置管理实践】01、Ansible 快速入门

目录 一、Ansible 快速入门 1.1 什么是 Ansible ​1.2 Ansible 主要功能 1.3 Ansible 的特点 1.4 Ansible 基础架构 二、Ansible 安装与配置 2.1 Ansible 安装 2.2 确认安装 三、Ansible 配置解读 3.1 Ansible 配置路径 3.2 Ansible 主配置文件 3.3 Ansi…

Spring系列一:spring的安装与使用

文章目录 &#x1f49e; 官方资料&#x1f34a;Spring5下载&#x1f34a;文档介绍 &#x1f49e;Spring5&#x1f34a;内容介绍&#x1f34a;重要概念 &#x1f49e;快速入门&#x1f34a;Spring操作演示&#x1f34a;类加载路径&#x1f34a;Debug配置&#x1f34a;Spring容器…

《Docker资源限制和调度策略:性能优化与资源管理,打造高效稳定的容器环境》

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【Nodejs】Puppeteer\爬虫实践

puppeteer 文档:puppeteer.js中文文档|puppeteerjs中文网|puppeteer爬虫教程 Puppeteer本身依赖6.4以上的Node&#xff0c;但是为了异步超级好用的async/await&#xff0c;推荐使用7.6版本以上的Node。另外headless Chrome本身对服务器依赖的库的版本要求比较高&#xff0c;c…

高速数据采集专家-FMC140【产品手册】

FMC140是一款具有缓冲模拟输入的低功耗、12位、双通道&#xff08;5.2GSPS/通道&#xff09;、单通道10.4GSPS、射频采样ADC模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.1规范&#xff0c;该模块可以作为一个理想的IO单元耦合至FPGA前端&#xff0c;8通道的JESD204…

【jenkins】idea+jenkins+docker+dockerfile+compose流水线部署java应用

目录 整体架构 环境准备 安装docker以及docker-compose jenkins安裝 maven安装 portainer面板安装 sonarqube安装 在项目中增加dockerfile和compose.yml脚本 Dockerfile脚本内容 compose.yml脚本内容 jenkins安装必要插件 jenkins增加流水线任务 增加pipeline任务j…

iptables 防火墙

防火墙&#xff1a;隔离功能 部署在网络边缘或者主机边缘&#xff0c;在工作中&#xff0c;防火墙的主要作用&#xff0c;决定哪些数据可以被外网使用&#xff0c;以及哪些数据可以进入内网访问 主要工作在网络层 安全技术 1.入侵检测系统&#xff1a;检测出威胁&#xff0…