如何遍历Qt QTableWidget高效删除多行?

摘要:Qt QTableWidge遍历删除行的问题 @ 问题 QTableWidget遍历删除时容易写成下面这种写法 for (int i = 0; i < ui->tableWidget_3-&
Qt QTableWidge遍历删除行的问题 @ 目录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行 ,也就是从最后一行开始移除 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);