Qt QTableWidge遍歷刪除行的問題
@
問題
QTableWidget
遍歷刪除時容易寫成下面這種寫法
for (int i = 0; i < ui->tableWidget_3->rowCount(); --i)
{
ui->tableWidget_3->removeRow(i);
}
這種寫法的問題:
- for循環的條件是
i < 表行數
,問題在於每次循環會移除一行,下次循環時表行數會減少,就會出現不能完全遍歷的問題 - 循環體中每次循環會移除第
i
行,然而每次循環之后會移除前一行,那么后一行就會變成前一行,這樣每次循環就變成了跳行移除
解決辦法
- 正確寫法1
- 先獲取表的總行數,做為循環條件,保持循環次數不變
- 每次循環時,只刪除起始行,前一行移除后下一行會自動移到前一行
int rowCount = ui->tableWidget_3->rowCount();
int start = 0;
for (int i = start; i < rowCount; ++i)
{
ui->tableWidget_3->removeRow(start);
}
- 正確寫法2
- 從后往前遍歷,因為行號的索引是從0開始的,所以
i
的起始值為表的行數減1
- 每次移除第
i
行 ,也就是從最后一行開始移除
- 從后往前遍歷,因為行號的索引是從0開始的,所以
for (int i = ui->tableWidget_3->rowCount() - 1; i >= 0; --i)
{
ui->tableWidget_3->removeRow(i);
}
其它
當然,如果你想刪除所有行的話可以直接調用QTableWidget
的void QTableWidget::setRowCount(int rows)
函數,將參數直接設置為0,QTableWidget
將會直接丟棄所有行
ui->tableWidget_3->setRowCount(0);