关于QTableWidget的selectRange

本文介绍了QTableWidget在删除行时需要注意的陷阱,强调了应该从最大索引行开始删除以避免崩溃。同时,讨论了QTableWidget的selectedRanges()接口在处理多行选择时可能出现的问题,指出在按顺序删除选中行时可能导致错误。正确做法是在处理选择范围时要考虑到选择的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QTableWidget 有一个容易出错崩溃的地方:在删除行的时候,行是在动态更新的,比如共有五行,删除第四行后,再删除第五行的时候肯定会崩溃,所以要从索引最大行开始删除;

另外一个qtablewidget有一个接口返回选择行号的范围,也有一个容易出错的地方:

QList<QTableWidgetSelectionRange> ranges = ui->tableWidget->selectedRanges();

如果选择第一行,在ctrl选择4和5行 那么顺序应该是 0 0,3 4

按顺序删除 删除第一行,再删除就要出错了


正确方法:

   QList<QTableWidgetSelectionRange> ranges = ui->tableWidget->selectedRanges();
   QVector<int> rows;
   for(int i = 0; i< ranges.size();++i)
   {
       for(int row = ranges[i].topRow(); row <= ranges[i].bottomRow();++row)
       {
           rows.push_back(row);
       }
   }
   std::sort(rows.begin(),rows.end(),[](int a,int b){return a > b;});  //结果是 4,3,0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值