首页 > 其他分享 >关于qtableview开发过程中的一些记录

关于qtableview开发过程中的一些记录

时间:2022-08-27 14:23:16浏览次数:76  
标签:界面 记录 QTableView 滚动条 qtableview 开发 verticalScrollBar 刷新 pTableWidget

使用QTableWidget刷新数据后,经常会自动展示为table首行。为了显示刷新数据前所在的位置,解决办法如下:

   

   先记住滚动条位置,刷新数据后,再重置滚动条位置。

伪代码如下:

QScrollBar *scrollBar = verticalScrollBar();
int barPos = scrollBar->value();

       //refresh

       scrollBar->setValue(barPos);

 

    更好的解决办法:  

  而最好的使用方式为使用QTableView+mode方式,此时更新数据后,当前窗口画面不会自动显示行table中的首行。

QTableView如何获取当前显示的可见行和列的索引?

 

假设一个QTableView的表格,其显示过万个单元格,且这些单元格的值都是些需要实时刷新(如1秒)的值,那么通常的实现就是:定义一个1秒的定时器,定时触发for循环,自第0行0列刷新到第n行n列

但实际上,无论界面大小如何变化,我们始终能看到的都是仅有的最多几十行、十来列而已。如果每次都把所有单元格刷新一遍,耗时且浪费性能,刷新一些看不见的单元格,其实没必要。

那么,怎么才能获取到QTableView的可见范围呢?

即,获取表格中显示的首行、首列,和末行、末列,这样的话,就可以实现可见范围的刷新!注意,不是第0行0列和第n行n列。

目前我的实现如下代码,期待有更好的解决办法:

 

 

在编辑完某个cell之后,更新界面,总默认跳转到界面最顶端,这个很烦人,有时候你加了很多行东西,每次跳转都顶端,还得拉下来,在进行下一次编辑。

跟了一下代码,发现是因为,我更新界面的时候,使用了clear()这个函数,

 

m_pTableWidget->clear(); //清除表中内容,包括标题头


我是每次更新,先clear(),然后又根据数据重刷的界面,而clear()会触发QtableWidget的滚动条的valueChanged()消息,发送的val是0.

 

解决办法:

首先,在每次编辑cell的时候,记录滚动条的位置和最大值,一定要记录最大值!!!

 

  1.   //记录当前选中
  2.   m_nCurSliderPos = m_pTableWidget->verticalScrollBar()->sliderPosition();
  3.   m_nCurSliderMaximum = m_pTableWidget->verticalScrollBar()->maximum();


然后,在更新界面的时候重新set这两个数据,

 

    1.   //界面回到之前的位置
    2.   m_pTableWidget->verticalScrollBar()->setMaximum(m_nCurSliderMaximum);
    3.   if(m_nCurSliderPos>0)
    4.   m_pTableWidget->verticalScrollBar()->setValue(m_nCurSliderPos);
    5.  

标签:界面,记录,QTableView,滚动条,qtableview,开发,verticalScrollBar,刷新,pTableWidget
From: https://www.cnblogs.com/eastgeneral/p/16630497.html

相关文章

  • mysql-开启日志记录功能
    开启日志记录功能--开启功能SETGLOBALgeneral_log=ON;--保存到文件SETGLOBALlog_output='file';查看日志内容--查看日志保存位置及开启状态showvariab......
  • Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。
    系列目录:本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。开源地址:https://github.com/cyq1162/Taurus.MVC本系列第一篇:Taurus.MVCV3.......
  • CAD二次开发 求曲线交点的方法
    AutoCAD的IntersectWith方法EntityentityPointer:与该实体相交的另一个实体IntersectintersectType:相交的类型,为一枚举QPoint3dCollectionpoints:获取所有相交的交点......
  • 褶积方法制作合成地震记录c++
    地震褶积方法制作合成地震记录包括,(1)读取相模型,设置每种相的密度和速度,(2)计算反射系数,添加噪音,(3)设置子波,(4)进行褶积计算。具体的代码如下voidsyntheticSeis(conststring&......
  • 8、开发工具软件 - 软件技术系列文章
        在实际的软件开发和项目管理过程中,都需要很多的工具软件,使用这些软件,能够提高软件人员的工作效率,笔者在总结软件技术的时候,就收集整理了一些软件工具,以便需要的......
  • 面试题做错记录(开卷)
    #JavaScript是一门单线程的静态类型语言错,是动态类型语言#浏览器中的Cookie只能由服务端写入,并且每次网络请求会自动携带Cookiecookie可以在本地用js方法新......
  • ASP.NET Core 6.0+Vue.js 3 实战开发(视频)
    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章或视频能成为你成长路上的垫脚石。录制视频的体验这是一个收费的视频,很抱歉,让您失望了。我尝试......
  • [转] git如何让别人参加入你的项目开发?
    我们自己远程仓库进行通信,需要将sshkey配置到自己的账户下既可以了。但是如果让别人参加进自己的项目开发,需要把别人的sshkey配置到自己的账户下吗?如果是自己搭建了简......
  • 2022 跳坑(或妙计)记录
    P7143[THUPC2021初赛]线段树有恒等式\[\sum_{i=1}^ni(n+1-i)=\binom{n+2}{3}\]左式为\(n\)长度所有子串长度和。组合理解:我们将\([0,n+1]\)共\(n+2\)个位置......
  • 【2022-08-26】python前端开发(五)
    python前端开发(五)JS获取值操作普通数据(输入、选择) 标签对象.value文件数据(上传) 标签对象.files 标签对象.files[0]leti1Ele=document.getElementById('d1......