zoukankan      html  css  js  c++  java
  • 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);
    
    做一条有理想的咸鱼
  • 相关阅读:
    JS浮点数的加减乘除运算
    鼓励心里的阳光
    mysql创建新用户并分配数据库权限
    CentOS下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)
    Python发送邮件
    SQL操作语句
    Mysql数据库操作语句
    Cookie,Session的区别
    Jmeter性能测试-分布式压力测试
    性能测试指标
  • 原文地址:https://www.cnblogs.com/Doyoung/p/14440617.html
Copyright © 2011-2022 走看看