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