Qt编程基础 | 第六章-窗体 | 6.5、QTableWidget 使用过程注意的问题

news2024/12/24 3:41:15

一、QTableWidget 使用过程注意的问题

1、添加行时要先设置行数

往表格重添加行时,要先设置行数,不然添加的内容看不到,如下:

void QCustomWidget::InitTableContent()
{
    for (int row = 0; row < m_rowData.size(); row ++)
    {
        // 注意:如果不设置行数,表格的内容显示不出来
        m_pTableWidget->setRowCount(m_pTableWidget->rowCount() + 1);

        for (int col = 0; col < MAX_COLUMN_SIZE; col ++)
        {
            QTableWidgetItem* pTableWidgetItemItem = new QTableWidgetItem;
            switch(col)
            {
            case 0:
                pTableWidgetItemItem->setText(m_rowData[row].name);
                break;
            case 1:
                pTableWidgetItemItem->setText(m_rowData[row].age);
                break;
            default:
                break;
            }
            m_pTableWidget->setItem(row, col, pTableWidgetItemItem);
        }
    }
}

2、初始化表格时屏蔽信号

某个单元格的内容发生变化,会触发cellChanged(int,int)信号。如果在初始化表格时,不希望触发信号,可以直接屏蔽QTableWidget相关的信号,如下:

// 屏蔽QtableWidget信号
m_ui->tableWidget->blockSignals(true);

for (int col = 0; col < MAX_COLUMN_SIZE; col++)
{
	QTableWidgetItem* pTableWidgetItem = new QTableWidgetItem;
	std::wstring text = GetTextByColumnIndex(col);
	pTableWidgetItem->setText(QString::fromStdWString(text));
	pTableWidgetItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

	// 添加Item (注意:如果不屏蔽信号,下面添加item的操作会触发cellChanged(int,int)信号)
	m_ui->tableWidget->setItem(rowCount - 1, col, pTableWidgetItem);
}

// 解除信号屏蔽
m_ui->tableWidget->blockSignals(false);

3、代理的Qt::EditRole存储的是界面显示的数据

如果界面用户输入的小数,界面显示时保留三位小数,但是实际存储时需要精度与输入的保持一致(即:输入的小数是12.345678,预期:界面显示的小数是12.346,实际存储的是12.345678)。此时、通过代理往模型存储数据时,为了保证精度不丢失,就要使用其它角色来存储数据,例如:使用Qt::UserRole存储实际的数据。

void LineEditDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
{
    QLineEdit* pLineEdit = qobject_cast<QLineEdit*>(editor);
    QString text = pLineEdit->text();

    model->setData(index, text, Qt::UserRole);
}

如果直接使用Qt::EditRole存储数据,会导致精度丢失,因为执行完m_pTableWidget->item(index.row(), index.column())->setText(strText)会改变Qt::EditRole存储的数据,通过下面的输出结果可以很清晰地证明这一点,如下:

void LineEditDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
{
    QString text = index.model()->data(index, Qt::UserRole).toString();
    double value = floor((text.toDouble() * pow(10, 3) + 0.5)) / pow(10, 3);

    // 单元格设置修改的值时,会修改Qt::EditRole角色存储的数据,通过下面的打印可以很清楚地证明这一点
    QString strText = QString::number(value, 'f', 3);
    m_pTableWidget->item(index.row(), index.column())->setText(strText);

    qDebug() << "setEditorData data(Qt::EditRole) = " << m_pTableWidget->item(index.row(), index.column())->data(Qt::EditRole);
    qDebug() << "setEditorData data(Qt::UserRole) = " << m_pTableWidget->item(index.row(), index.column())->data(Qt::UserRole);

    QLineEdit* pLineEdit = qobject_cast<QLineEdit*>(editor);
    pLineEdit->setText(text);
}

从前面界面输入小数12.345678

在这里插入图片描述

输出结果

setEditorData data(Qt::EditRole) =  QVariant(QString, "12.346")
setEditorData data(Qt::UserRole) =  QVariant(QString, "12.345678")

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

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

相关文章

DAY4,ARM(用c语言点亮LED灯,封装库代码,软件编程控制硬件)

---gpio.h头文件--- #ifndef __LED_H__ #define __LED_H__//1RCC_MP_AHB4ENSETR寄存器封装 #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000a28)//2GPIO封装结构体 typedef struct {volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigne…

Python系统学习1-9-类二之MVC框架

一、模型说明 View视图:处理界面逻辑,输入输出 Controller控制器:处理核心逻辑,存储计算 Model模型:将多个变量组合为一种类型 二、注意事项 类外通过自定义对象名调用 类中通过self调用 """疫情信息管理系统学习MVC的软件架构View Controller Model视…

汇川脉冲伺服SV630P常用参数设置(博途PLC脉冲输出控制)

有关博途PLC脉冲输出控制功能块详细介绍,请查看下面博客链接: 博途1200PLC轴控功能块(脉冲轴)_博图 轴控块_RXXW_Dor的博客-CSDN博客STRUCT// 轴使能// 轴正向点动// 轴反向点动// 轴回原// 轴复位// 轴暂停// 轴快速停机// 轴绝对定位// 轴相对定位// 轴匀速运行// 修改轴参…

Dubbo基础学习

目录 第一章、概念介绍1.1&#xff09;什么是RPC框架1.2&#xff09;什么是分布式系统1.3&#xff09;Dubbo概述1.3&#xff09;Dubbo基本架构 第二章、服务提供者(直连)2.1&#xff09;目录结构和依赖2.2&#xff09;model层2.3&#xff09;service层2.4&#xff09;resources…

Java课题笔记~ 日期处理

2.8 日期处理 2.8.1 日期注入 日期类型不能自动注入到方法的参数中。需要单独做转换处理。 使用DateTimeFormat注解&#xff0c;需要在springmvc.xml文件中添加mvc:annotation-driven/标签。 &#xff08;1&#xff09;在方法的参数上使用DateTimeFormat注解 RequestMappi…

浅谈SPA

1. 基本概念 ● SPA(single-page application) 单页应用,默认情况下我们编写Vue,React都只有一个html页面并且提供一个挂载点,最终打包后会在此页面中引入对应的资源.(页面渲染全部由js动态进行渲染).切换页面时通过监听路由变化,渲染对应的页面(client side rendering,客户端…

探秘分布式大数据:融合专业洞见,燃起趣味火花,启迪玄幻思维

文章目录 一 数据导论二 大数据的诞生三 大数据概论3.1 大数据的5V特征3.2 大数据的工作核心 四 大数据软件生态4.1 数据存储软件4.2 数据计算软件4.3 数据传输软件 五 Apache Hadoop概述5.1 Apache Hadoop框架5.2 Hadoop的功能5.3 Hadoop的发展5.4 Hadoop发行版本 一 数据导论…

使用Python批量将Word文件转为PDF文件

说明&#xff1a;在使用Minio服务器时&#xff0c;无法对word文件预览&#xff0c;如果有需要的话&#xff0c;可以将word文件转为pdf文件&#xff0c;再存储到Minio中&#xff0c;本文介绍如果批量将word文件&#xff0c;转为pdf格式的文件&#xff1b; 安装库 首先&#xff…

由于找不到msvcp140.dll无法继续执行代码是什么原因

使用计算机过程中&#xff0c;有时会遇到一些错误提示&#xff0c;其中之一就是关于msvcp140.dll文件丢失或损坏的错误。msvcp140.dll是Windows系统中非常重要的文件&#xff0c;是Microsoft Visual C Redistributable中动态链接库的文件&#xff0c;如果缺失或损坏&#xff0c…

Git 入门到熟悉

一、版本控制 1.1 什么是版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单说就是用于管理多人协同开…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——三段论——第二节 规则

文章目录 第二节 三段论-规则题-三段论-规则-补前提-“特推特&#xff0c;否推否&#xff0c;两特两否无结论”得前提是“有的/所有”→所有概念出现两次→中项要周延。题-三段论-规则-补前提-“特推特&#xff0c;否推否&#xff0c;两特两否无结论”得前提是“有的/所有”→…

css 文字排版-平铺

序&#xff1a; 1、表格的宽度要有&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 2、容器不能是display:inline 3、扩展---》node全栈框架 代码 text-align-last: justify; width: 70px; display: inline-block; 主要是用于表单左侧文字排序&#xff01;

AI如何看待能力,学历,文凭

1 假设&#xff1a; {文凭}⊂{学历}⊂{能力} 2 证明&#xff1a; 首先&#xff0c;我们需要明确这些集合的定义和关系。 {能力}是一个包含各种能力的集合&#xff0c;例如学习能力、沟通能力、创新能力、领导能力和专业技能等。 {学历}是一个包含各种学历的集合&#xff0c…

ps安装找不到msvcp140.dll,分享msvcp140.dll丢失三个修复方法

当在安装PS&#xff08;Adobe Photoshop&#xff09;时遇到找不到msvcp140.dll的错误提示时&#xff0c;我首先感到有些困惑&#xff0c;因为这个错误可能会影响我使用某些程序或软件。但是&#xff0c;通过尝试不同的修复方法&#xff0c;我发现问题可以得到解决。 首先缺失ms…

Linux多线程【初识线程】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、什么是线程&#xff1f;1.1、基本概念1.2、线程理解1.3、进程与线程的关系…

[oneAPI] Neural Style Transfer

[oneAPI] Neural Style Transfer oneAPINeural Style Transfer特殊环境定义使用包加载数据Neural Style Transfer模型与介绍训练过程结果 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&#xff1a;https://devcl…

1609.奇偶数

目录 一、题目 二、代码 三、完整测试代码 一、题目 1609. 奇偶树 - 力扣&#xff08;LeetCode&#xff09; 二、代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0),…

【大数据Hive】hive 事务表使用详解

目录 一、前言 二、Hive事务背景知识 hive事务实现原理 hive事务原理之 —— delta文件夹命名格式 _orc_acid_version 说明 bucket_00000 合并器(Compactor) 二、Hive事务使用限制 参数设置 客户端参数设置 客户端参数设置 三、Hive事务使用操作演示 操作步骤 客…

电脑msvcr120.dll丢失怎么修复,msvcr120.dll怎么安装?

msvcr120.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是Windows操作系统中的一个动态链接库文件。这个文件包含了一些用于C编程的函数和资源&#xff0c;它们被许多应用程序用于提供特定的功能和服务。如果你在运行某个程序时遇到了缺少msvcr120.dll的错误…