关于QTableWidget的selectRange

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

你可能感兴趣的:(QT)