ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-08-27 14:32:09  阅读:196  来源: 互联网

标签:界面 记录 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
来源: https://www.cnblogs.com/eastgeneral/p/16630497.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有