Qt QTableWidge遍歷刪除行的問題


Qt QTableWidge遍歷刪除行的問題

@

問題

QTableWidget遍歷刪除時容易寫成下面這種寫法

	for (int i = 0; i < ui->tableWidget_3->rowCount(); --i)
	{
		ui->tableWidget_3->removeRow(i);
	}

這種寫法的問題:

  1. for循環的條件是i < 表行數,問題在於每次循環會移除一行,下次循環時表行數會減少,就會出現不能完全遍歷的問題
  2. 循環體中每次循環會移除第i行,然而每次循環之后會移除前一行,那么后一行就會變成前一行,這樣每次循環就變成了跳行移除

解決辦法

  1. 正確寫法1
    1. 先獲取表的總行數,做為循環條件,保持循環次數不變
    2. 每次循環時,只刪除起始行,前一行移除后下一行會自動移到前一行
	int rowCount = ui->tableWidget_3->rowCount();
	int start = 0;
	for (int i = start; i < rowCount; ++i)
	{
		ui->tableWidget_3->removeRow(start);
	}
  1. 正確寫法2
    1. 從后往前遍歷,因為行號的索引是從0開始的,所以i的起始值為表的行數減1
    2. 每次移除第i行 ,也就是從最后一行開始移除
	for (int i = ui->tableWidget_3->rowCount() - 1; i >= 0; --i)
	{
		ui->tableWidget_3->removeRow(i);
	}

其它

當然,如果你想刪除所有行的話可以直接調用QTableWidgetvoid QTableWidget::setRowCount(int rows)函數,將參數直接設置為0,QTableWidget將會直接丟棄所有行

	ui->tableWidget_3->setRowCount(0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM