QtableWidget插入数据卡顿优化方法

news2025/4/4 9:31:37

最近要使用Qtablewidget保存4300多的数据,发现以下刷新4300条数据,界面会变得非常卡顿,于是想了优化一下;因为要对所有数据排序,想用一下Qtablewidget自动排序功能,而且数据量不多,不想采用动态加载的方式来实现;

方法1复用内存,不重复清除创建

以前每次都会清除,然后重新创建对象,写数据,发现重新pIterm = new QTableWidgetItem;非常耗时,导致界面卡顿;于是想复用已经创建的QTableWidgetItem,插入数据时,先获取Qtablewidget的item,直接在上面写数据;发现速度快了很多;

void QStockView::SlotUpdateHisDataTable(map<QString, HisAnalyzeInfo>& mapHisAnalyze)
{
    m_bUpdatingHisTable = true;
    //ui.tableWidgetHis->setUpdatesEnabled(false);
    //删除内容
    int RowCount = ui.tableWidgetHis->rowCount();
    /*while (rownum > 0)//删除重新插入比较耗时
    {
        ui.tableWidgetHis->removeRow(0);
        rownum--;
    }*/
    //ui.tableWidgetHis->setColumnCount(10);
    map<QString, HisAnalyzeInfo>::iterator it = mapHisAnalyze.begin();
    QTableWidgetItem* pIterm = NULL;
    
    int rownum = 0;
    //先插入已经存在的

    for (;it!= mapHisAnalyze.end();it++)
    {
        int colum = 0;
        if (RowCount>0)
        {
            //第0行是复选框,从1开始
            ui.tableWidgetHis->setRowHidden(rownum, false);
            colum = 1;
            pIterm = ui.tableWidgetHis->item(rownum,colum++);//代码
            if (pIterm != NULL)
            {
                QString strStockCode = it->second.strCode;
                strStockCode = strStockCode.right(6);
                pIterm->setText(strStockCode);
            }
            RowCount--;//可用行数减一
            
        }
        else//插入新的数据
        {

            ui.tableWidgetHis->insertRow(rownum);
            /*QCheckBox* pCheckBox = new QCheckBox();
            pCheckBox->setFixedWidth(20);
            pCheckBox->setChecked(false);
            ui.tableWidgetHis->setCellWidget(rownum, colum++, pCheckBox);*/
            pIterm = new QTableWidgetItem;
            pIterm->setCheckState(Qt::Unchecked);
            ui.tableWidgetHis->setItem(rownum, colum++, pIterm);
            pIterm = new QTableWidgetItem;
            if (pIterm != NULL)
            {
                QString strStockCode = it->second.strCode;
                strStockCode = strStockCode.right(6);
                pIterm->setText(strStockCode);
            }
        }
        rownum++;
    }
    if (RowCount > 0)//隐藏多余的行
    {
        for (int i=0;i<RowCount;i++)
        {
            ui.tableWidgetHis->setRowHidden(rownum+i,true);
        }
    }
    //Slotsortbyclounm(m_sortCloum);//隐藏和排序同时使用时会导致错乱,Qtablewidget->setRowHidden()将无效该隐藏的行没有隐藏;,所以这里注释掉 m_bUpdatingHisTable = false; }

(2)经过上述方法发现,当数据量是4000多时,虽然复用了内存空间,重新刷新一次也要十几秒的时间,而且界面会卡住无响应

原因竟然是第一列采用QCheckBox* pCheckBox = new QCheckBox();插入的复选框,导致刷新数据会非常卡,换成了QTableWidgetItem(pIterm = new QTableWidgetItem; pIterm->setCheckState(Qt::Unchecked))自带的checkbox功能后,用统一的QTableWidgetItem去写数据,不用自定义的widget去设置,速度会很快,4000多条数据1秒之后就加载完成,非常快。也不卡;

 遇到的问题

Qtablewidget->setRowHidden()之后紧跟排序Slotsortbyclounm(m_sortCloum),setRowHidden()将会无效,导致无法隐藏想要隐藏的行;可以考虑用信号槽去关联,或者等到隐藏结束,竖向滚动条的范围发生改变时,再去排序;
Slotsortbyclounm(m_sortCloum);//隐藏和排序同时使用时会导致错乱,Qtablewidget->setRowHidden()将无效该隐藏的行没有隐藏;,所以这里注释掉 m_bUpdatingHisTable = false; }

 如果对软件感兴趣,可维新共总好:QStockView 获取;

 

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

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

相关文章

【教学类-32-02】十二生肖2.0版(绘画+手工+排序+左右分类+玩牌)(中班:偏科学-数)

作品展示 2.0样式——动物头部方向随机向左、或者向右 背景需求 1.0样式——动物头部方向全部向右&#xff0c; 我希望孩子分类的时候还能够“判断生肖头部的方向做一个左右分类” 素材准备&#xff1a; 1、图片准备 office PPT2013里面有一个图标的功能&#xff0c;内置大量…

java继承类怎么写

继承类是通过把父类的方法和属性继承到一个类中&#xff0c;而子类的方法和属性是子类自己定义的。 Java中有一个很重要的概念叫做继承&#xff0c;这也是 Java语言的精髓所在。Java语言提供了一种机制&#xff0c;叫做派生类。在 Java中&#xff0c;如果没有实现了某个派生类方…

终端和文件运行python代码

如何创建python文件&#xff1f;新建一个txt&#xff0c;然后修改后缀名为 .py&#xff0c; 然后修改打开方式为记事本&#xff0c;写入一行代码&#xff0c;然后关闭 接下来如何运行呢&#xff1f;让他输出这一段代码 winR cmd 回车 &#xff0c;然后输入python 文件地址 我…

ChatGPT 未来的前景以及发展趋势

当谈到ChatGPT的未来和发展趋势时&#xff0c;需要考虑人工智能技术以及文本生成和交互的迅速发展。在这方面&#xff0c;ChatGPT的前景非常有希望&#xff0c;因为它是一种迄今为止最先进的人工智能技术之一。 ChatGPT是一种基于机器学习的自然语言处理技术&#xff0c;它能够…

MyBatis学习总结(四) MyBatis 延迟加载策略MyBatis 一级缓存、二级缓存MyBatis注解开发

MyBatis学习总结&#xff08;四&#xff09; MyBatis 延迟加载策略/MyBatis 一级缓存、二级缓存/MyBatis注解开发 一、 MyBatis 延迟加载策略 通过前面的学习&#xff0c;我们已经掌握了 MyBatis 中一对一&#xff08;多对一&#xff09;、一对多、多对多关系的配置及实现&am…

【Android入门到项目实战-- 5.1】—— 广播(一):接收系统广播

目录 一、什么是广播&#xff1f; 二、广播的类型 标准广播 有序广播 三、接收系统广播 1、动态注册监听网络变化 如何注册广播接收器&#xff1f; 2、静态注册实现开机启动 使用快捷方式创建广播接收器 实现开机广播 一、什么是广播&#xff1f; android广播机制就是…

全网最详细,Jmeter性能测试-性能进阶, 多协议实战Websocket/Dubbo(七)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 Jmeter是目前主流的…

自行车及电动自行车出口美国GCC认证要求

所有进口商和美国本土制造商都必须签发普通合格证书&#xff08;GCC&#xff09;证明其产品符合具体规定要求。进口商和本土制造商应向认可的第三方实验室提交样品测试其产品是否符合相关安全法规。提供第三方实验室测试报告&#xff0c;合格证书由进口商和本土制造商提供。在外…

pytorch通过不同的维度提高cifar10准确率

各个维度通过模型通过优化器通过batchsize通过数据增强总结当前网络的博客上都是普遍采用某个迁移学习训练cifar10&#xff0c;无论是vgg&#xff0c;resnet还是其他变种模型&#xff0c;最后通过实例代码&#xff0c;将cifar的acc达到95以上&#xff0c;本篇博客将采用不同的维…

九龙证券|300亿空袭,港股吓懵了!

港股再度大幅回调&#xff0c;腾讯成了“导火索”。 当地时刻4月11日&#xff0c;腾讯大股东Prosus发布公告称拟再度进行回购&#xff0c;作为回购方案的一部分&#xff0c;Prosus本周将采纳行动&#xff0c;把9600万股腾讯股票以凭据方式移入香港中心结算系统&#xff0c;以便…

八、市场活动-创建

需求分析 用户在市场活动主页面,点击"创建"按钮,弹出创建市场活动的模态窗口; 用户在创建市场活动的模态窗口填写表单,点击"保存"按钮,完成创建市场活动的功能. *所有者是动态的(//在现实市场活动主页面时&#xff0c;就从数据库中查询出所有用户并且…

基于ChatGLM-6b+Streamlit+QDrant+DuckDuckGo搭建本地问答机器人及缓解时效性问题方案

本地部署chatglm及缓解时效性问题的思路&#xff1a; 模型使用chatglm-6b 4bit&#xff0c;推理使用hugging face&#xff0c;前端应用使用streamlit或者gradio。 微调对显存要求较高&#xff0c;还没试验。可以结合LoRA进行微调。 缓解时效性问题&#xff1a;通过本地数据库…

word页码从指定页开始,具体设置步骤

word页码从指定页开始&#xff0c;具体设置步骤1、在文档页面&#xff0c;以目录后第一页为页码开始页为例&#xff0c;也就是正文第一页&#xff0c;首先将鼠标光标定位到目录页最后的位置2、在【布局】选项下点击【分隔符】选项。3、在分隔符中选择【分节符】下的【下一页】。…

深度学习-第T4周——猴痘病识别

深度学习-第T4周——猴痘病识别深度学习-第T4周——猴痘病识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签2、数据可视化3、检查数据4、配置数据集五、搭建CNN网…

Day943.持续集成流水线 -系统重构实战

持续集成流水线 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于持续集成流水线的内容。 从团队协作的角度上来看&#xff0c;在版本发布过程中&#xff0c;经常出现测试依赖开发手工生成制品、版本发布也从开发本地出版本的问题。而且项目架构如果从单体演进至组件…

MySQL-双主高可用

目录 &#x1f341;拓扑环境 &#x1f341;配置两台MySQL主主同步 &#x1f343;修改MySQL配置文件 &#x1f343;配置主从关系 &#x1f343;测试主主同步 &#x1f341;keepalived高可用 &#x1f343;keepalived的安装配置 &#x1f343;master配置 &#x1f343;slave配置 …

R -- 用psych包做因子分析

因子分析 因子分析又称为EFA&#xff0c;是一系列用来发现一组变量的潜在结构的办法。它通过寻找一组更小的&#xff0c;潜在的结构来解释已观测到的显式的变量间的关系。这些虚拟的、无法观测的变量称为因子&#xff08;每个因子被认为可以解释多个观测变量间共有的方差&…

【回眸】ChatGPT Plus(GPT4体验卡)

前言 没忍住诱惑&#xff0c;开了个GPT4.0的会员&#xff0c;给大家表演一波 开通成功 开始问问题 写一个CNN疲劳驾驶监测代码&#xff0c;要求{使用Python语言&#xff0c;使用包&#xff0c;能成功运行&#xff0c;需要调用电脑摄像头&#xff0c;要求GUI界面有一些参数…

Python爬虫框架的介绍

爬虫框架的介绍Scrapy框架Crawley框架Portia框架Newspaper框架Python-goose框架随着网络爬虫的应用越来越多&#xff0c;一些爬虫框架逐渐涌现&#xff0c;这些框架将爬虫的一些常用功能和业务逻辑进行封装。这些框架的基础上&#xff0c;根据自己的需求添加少量的代码&#xf…

【操作系统 os学习笔记】

操作系统一、第一章&#xff1a;操作系统概述Ⅰ. 操作系统的基本概念1.操作系统的概念1.1 什么是操作系统&#xff1f;1.2 计算机系统的构成1.3 OS是一种系统软件1.4 OS作为系统软件&#xff0c;做了哪些事情2.操作系统的目标和功能2.1 目标2.2 功能3.操作系统的特征3.1 并发3.…