QTableWidget选中多行并执行删除的问题

guo88455648 2018-09-14 04:08:18
现在我能够得到选中区域的行号,代码如下:
QList<QTableWidgetSelectionRange>ranges = ui->tableWidget->selectedRanges();

int count=ranges.count();
for(int i=0;i<count;i++)
{

int topRow=ranges.at(i).topRow();
int bottomRow=ranges.at(i).bottomRow();
for(int j=topRow;j<=bottomRow;j++)
{
qDebug()<<"selectRow"<<j;
}
}

但是存在一个问题,输出的行号和鼠标选择区域的先后有关系,如果是选择三个区域,比如先选择了5,6行,又选择了2,3行,最后选择了8,9行,则获取的行号输出的顺序就是5,6,2,3,8,9,这样就存在一个问题,在执行删除的时候就有问题了,因为我现在执行的删除工作是单独一行执行的,如果按照获取行号的顺序进行删除,删除完一行以后,整个列表的行号就改变了,再按前面获取的行号进行删除,肯定就会乱套了。
请问有什么方法可以解决这个问题。
...全文
1527 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lotusguy 2020-11-22
  • 打赏
  • 举报
回复
拿到行数n,执行n次删除row(0)
changle1994 2020-01-19
  • 打赏
  • 举报
回复 1
不需要排序 QList<QTableWidgetItem *>selectFiles = ui->tableWidget->selectedItems();//获取所有选定项目的列表 for(int i = 0;i<selectFiles.count();i++) { int currrentRow = ui->tableWidget->row(selectFiles.at(i)); ui->tableWidget->removeRow(currrentRow); i++; }
@风轻云淡_ 2018-09-14
  • 打赏
  • 举报
回复
这不失为一个好办法,怎么能说笨呢。。
guo88455648 2018-09-14
  • 打赏
  • 举报
回复
引用 3 楼 qq_39850605 的回复:
先选择了5,6行,又选择了2,3行,最后选择了8,9行,获取这些行号,简单的排下序,然后,从后面往前删,先删第9行,第8行,第6行.........即可

只能通过排序了吗?自己觉得排序实在太笨了,就没用排序。看来只能用笨办法了。
@风轻云淡_ 2018-09-14
  • 打赏
  • 举报
回复
先选择了5,6行,又选择了2,3行,最后选择了8,9行,获取这些行号,简单的排下序,然后,从后面往前删,先删第9行,第8行,第6行.........即可
kbasm 2018-09-14
  • 打赏
  • 举报
回复
把行号存数组里,排倒序,然后按行号删除
NexTor 2018-09-14
  • 打赏
  • 举报
回复
那你就先排序,将5,6,2,3,8,9排序成9,8,6,5,3,2,然后从后往前删行,先删9,最后删到2

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧