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

news2024/10/2 8:38:08

目录

  • 所说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
        // 方式1
        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);
            }
        }
#endif
         connect(pBtn, SIGNAL(clicked()), this, SLOT(onBtnClick()));
    }

    //方式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);
                }
            }
         }
    }
}

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");
         else
            pBtn->setProperty("status", "1");
         pBtn->setStyleSheet(pBtn->styleSheet());
    }
}

效果

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

在这里插入图片描述

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

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

相关文章

工业物联网网关让PLC数据手机端监控和报警更加简单

在传统的工厂管理中&#xff0c;我们想要看到现场设备的实时数据&#xff0c;必须在控制室内通过工控机、电脑、触摸屏等这些上位机设备才能看到&#xff0c;同理PLC维护也需要工程师在现场进行编程调试工作&#xff0c;非常不方便。 随着工业物联网的发展&#xff0c;作为设备…

一个废话巨多的 printf 题

网友给了一个题&#xff0c;这题是个格式化字符串漏洞的题。很有代表性&#xff0c;专门把这题说一下。其中为入门级的多说些废话。 附1&#xff1a;gdb 作pwn题是绕不开gdb的&#xff0c;而gdb本身不方便用&#xff0c;于是有了各种插件pwngdb,peda,gdbinit,gef都很牛&#…

Kafka-配置Kerberos安全认证(JDK8、JDK11)

一、相关配置 1、JAAS 配置文件 KafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTabtruestoreKeytrueserviceName"kafka"keyTab"D:/code/demo/conf/kafka.service.keytab"principal"kafka/hdp-1"; }; 2、keytab 文…

网络安全必备的10款工具(附安装包)

“磨刀不误砍柴工”。 优秀的工具有助于提高工作效率&#xff0c;安全工程师也需要优秀的安全软件来提高工作效率。 在具体的工作场景中&#xff0c;有很多种选择&#xff0c;这里有10种开源的免费安全工具&#xff0c;不仅可以提高工作效率&#xff0c;还可以降低企业成本。 …

elasticsearch使用记录

参考文章&#xff1a;https://elasticsearch-py.readthedocs.io/en/v8.8.2/ 参考文章&#xff1a;https://cuiqingcai.com/6214.html 参考文章&#xff1a;https://www.cnblogs.com/cupleo/p/13953890.html elasticsearch版本&#xff1a;8.8.2(软件包发行版) python版本&#…

大数据教材推荐-《Python数据分析与应用(第2版)(微课版)》

《Python数据分析与应用(第2版)(微课版)》 是“十四五”职业教育国家规划教材&#xff0c;也是大数据应用开发“1X”职业技能等级证书配套系列教材&#xff0c;以任务为导向&#xff0c;全面介绍数据分析的流程和应用&#xff0c;详细讲解利用Python解决企业实际问题的方法。内…

Object.hasOwn 低版本浏览器兼容性问题解决

使用 hasOwn 去测试属性是否存在 &#xff0c;报错如下&#xff1a; 原因&#xff1a; hasOwn是es2022新语法&#xff0c;旧浏览器不支持。 解决方案&#xff1a; 使用Object.hasOwnProperty()代替。 Object.prototype.hasOwnProperty.call(obj, id)

1台相当于种20棵树!海尔冷媒变流空调获用户和社会双重满意

作者 | 曾响铃 文 | 响铃说 空调调到26度&#xff0c;风速调到2档&#xff0c;长按制冷键5秒......每年夏天&#xff0c;暑热来临&#xff0c;在抖音、小红书等社交平台上总能刷到类似的“开空调小技巧”。据说&#xff0c;按照这样来开空调&#xff0c;不仅可以实现凉而不冷…

-bash: /bin/rm: Argument list too long

有套数据库环境&#xff0c;.aud文件太多导致/u01分区使用率过高&#xff0c;rm清理时发现报错如下 [rootdb1 audit]# rm -rf ASM1_ora_*202*.aud -bash: /bin/rm: Argument list too long [rootdb1 audit]# rm -rf ASM1_ora_*20200*.aud -bash: /bin/rm: Argument list too…

Sui Move与标准Move的有哪些区别和根本性创新

Sui网络将Sui Move作为其本地编程语言&#xff0c;使用Sui Move编写的apps利用Sui的共识机制&#xff0c;实现了令人印象深刻的交易性能。 然而&#xff0c;熟悉Move编程语言的开发者在探索Sui文档时可能会感到困惑&#xff0c;因为该文档着重介绍了对象和一些指令&#xff0c…

使用TensorFlow训练深度学习模型实战(上)

大家好&#xff0c;尽管大多数关于神经网络的文章都强调数学&#xff0c;而TensorFlow文档则强调使用现成数据集进行快速实现&#xff0c;但将这些资源应用于真实世界数据集是很有挑战性的&#xff0c;很难将数学概念和现成数据集与我的具体用例联系起来。本文旨在提供一个实用…

自然语言处理应用程序设计

原文地址&#xff1a;https://zhanghan.xyz/posts/22426/ 文章目录 一、摘要二、数据集三、相关环境四、功能展示1.系统主界面2.中文分词3.命名实体识别4.文本分类5.文本聚类6.其他界面 五、源码链接 一、摘要 将自然语言处理课程设计中实现的模型集成到自然语言处理应用程序…

利用模 m 的原根存在性判断以及求解

完整资料进入【数字空间】查看——搜索"writebug" 一、题目&#xff1a; 模 m 的原根存在性判断以及求解。判断 m 原根是否存在&#xff0c;如存在给出一个原根以及所有原根。 二、问题描述 首先要判断给定模 m 是否存在原根&#xff0c;然后需要对其原根进行求解。…

js截取字符串

1、 split() 方法用于把一个 字符串 分割成 字符串数组 var str "123,456,789"; console.log(str.split()); // ["1", "2", "3", ",", "4", "5", "6", ",", "7", &…

性能测试—性能监控

性能监控 性能监控是指通过收集、分析和报告关键性能指标&#xff0c;实时监测系统、应用程序或网络的性能和健康状况。通过性能监控&#xff0c;您可以及时发现潜在的性能问题&#xff0c;识别系统瓶颈&#xff0c;并进行性能优化。 以下是一些常见的性能监控指标和技术&…

标准IO_打开和关闭文件_fopen,fdopen,freopen,stdin,stdout,stderr

目录 1.打开文件 1.1 fopen函数原型 1.1.1 fopen函数 1.1.2 fopen函数原理 1.1.3 文本文件和二进制文件区别&#xff1f; 1.1.4 “r"模式和“rb”模式区别&#xff1f; 1.1.5 fopen函数使用示例 1.2 fdopen函数原型 1.2.1 fdopen函数 1.2.2 fdopen函数原理 1.2…

电脑丢失msvcp140.dll的解决方法分享

如果你在使用电脑时遇到了“找不到msvcp140.dll”的错误提示&#xff0c;别着急&#xff01;这并不是什么严重的问题&#xff0c;电脑丢失msvcp140.dll的解决方法分享&#xff0c;只要你按照以下方法进行处理&#xff0c;很快就能够顺利地解决它。 一.什么是msvcp140.dll msvc…

Spring Boot与MyBatis结合 实现对mock平台改造

上一章&#xff1a; 测开工具&#xff1a;spring boot 实现mock平台_springboot搭建mock_做测试的喵酱的博客-CSDN博客 代码地址&#xff1a; GitHub - 18713341733/mock: Spring Boot与MyBatis结合 实现对mock平台改造 一、背景 读取数据改为从mysql数据库中读取。 Sp…

RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎,全网唯一)

全新RDIFramework.NET V6.0 CS敏捷开发框架发布&#xff0c;全网唯一支持.NET6&#xff0c;Framework双引擎&#xff0c;降低开发成本&#xff0c;提高产品质量&#xff0c;提升用户体验与开发团队稳定性&#xff0c;做软件就选RDIFramework.NET开发框架。 1、RDIFramework.NET…

主从复制高级进阶

从主库入手&#xff1a; 关闭 主&#xff1a;修改配置文件 /etc/my.cnf 查看日志 查看 从&#xff1a; 修改重启 重启后报错&#xff0c;可能是uuid相同&#xff0c;要修改 查看状态 都是yes 从 从库入手 修改配置文件重启 从3&#xff1a; 从2&#xff1a; 先停止slave …