• 1810阅读
  • 6回复

[讨论]关于QTableView实时刷新和点击表头排序时,选中行出现不稳定的情况 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2021-10-08
如题,各位大佬,在QTableView开发中,我通过QTableView派生出一个子类,然后再自定义自己的模型,并在模型里重写sort方法,实现排序的功能。在QTableView构造函数里,开启定时器,每三秒定时刷新QTableView表格数据,再快速点击表头进行排序时,选中行可能会因为排序或实时刷新的问题,出现错乱或不准的现象,导致在选中行单击右键的时候,出现了删除操作有误,请问各位大佬,有什么办法,避免它在排序时去选中行导致右键菜单操作出现错误,或如何判断排序完成后,再选中行的右键菜单操作?
在线等,欢迎各位大佬指点一下,小弟在此不胜感激!
离线maxlogo

只看该作者 1楼 发表于: 2021-10-08
tableview有两个model,一是source model,一是proxy model (sort model?),所以要做好这两个的映射关系
个人博客:
简书:https://www.jianshu.com/u/14fa805306bd
CSDN:https://blog.csdn.net/qq10097355
思否:https://segmentfault.com/u/lowbees/articles
离线lwei24

只看该作者 2楼 发表于: 2021-10-09
回 maxlogo 的帖子
maxlogo:tableview有两个model,一是source model,一是proxy model (sort model?),所以要做好这两个的映射关系 (2021-10-08 22:10) 

现在不是有两个model,是我通过QAbstractTableModel派生出自定义的model,然后在这个model里重写sort排序功能,由于QTableView的派生类里添加了定时器,然后在快速排序时,立刻点击右键菜单进行删除操作,就有可能会出现选中行不稳定(还在排序或刷新时)最终导致了误删。比如,我快速点击某列的表头排序,然后立即点击某行右键删除,原本选中行是2,删除的应该是2,但可能因为快速排序没有完成或正在刷新,导致了删除的不是2.
离线gnibuoz

只看该作者 3楼 发表于: 2021-10-09
回 lwei24 的帖子
lwei24:现在不是有两个model,是我通过QAbstractTableModel派生出自定义的model,然后在这个model里重写sort排序功能,由于QTableView的派生类里添加了定时器,然后在快速排序时,立刻点击右键菜单进行删除操作,就有可能会出现选中行不稳定(还在排序或刷新时)最终导致了误删。比如, .. (2021-10-09 08:47) 

所以你的问题在于不应该用行号进行删除,而是应该用一个与行号无关(排序无关)的每一行唯一的值(如ID)进行删除的操作
我就是我,颜色不一样的烟火...
离线maxlogo

只看该作者 4楼 发表于: 2021-10-09
个人博客:
简书:https://www.jianshu.com/u/14fa805306bd
CSDN:https://blog.csdn.net/qq10097355
思否:https://segmentfault.com/u/lowbees/articles
离线lwei24

只看该作者 5楼 发表于: 2021-10-09
回 gnibuoz 的帖子
gnibuoz:所以你的问题在于不应该用行号进行删除,而是应该用一个与行号无关(排序无关)的每一行唯一的值(如ID)进行删除的操作[表情] (2021-10-09 09:29) 

你想错了,我的目的就是想要在刷新或排序时能够准确删除指定行。
离线lwei24

只看该作者 6楼 发表于: 2021-10-09
回 maxlogo 的帖子
maxlogo:https://waleon.blog.csdn.net/article/details/50969661 (2021-10-09 10:27) 

多谢提供帮忙。
快速回复
限100 字节
 
上一个 下一个