C++ QTableWidget更新项

C++ QTableWidget更新项,c++,qt,C++,Qt,我在更新QTableWidgetItems时遇到问题。我不明白我做错了什么:( 代码和解释 一步一步解决问题 首次插入=确定时,将填充所有第一个单元格 更新第一个插入的项目=确定,更新所有第一个单元格 当第二次插入=确定时,所有第二个单元格都已填充 更新第二个插入的项目=确定,更新所有第二个单元格 更新第一个插入的项目=失败,所有第一个单元格都已更新,但下一个单元格的第一个表为空。为什么 代码: void主窗口::fillTable(QList Info) { int Row=ui->clien

我在更新QTableWidgetItems时遇到问题。我不明白我做错了什么:(

代码和解释

一步一步解决问题

  • 首次插入=确定时,将填充所有第一个单元格
  • 更新第一个插入的项目=确定,更新所有第一个单元格
  • 当第二次插入=确定时,所有第二个单元格都已填充
  • 更新第二个插入的项目=确定,更新所有第二个单元格
  • 更新第一个插入的项目=失败,所有第一个单元格都已更新,但下一个单元格的第一个表为空。为什么
  • 代码:

    void主窗口::fillTable(QList Info)
    {
    int Row=ui->clientsList->rowCount()-1;//从0开始。
    //检查客户端行是否已存在。
    对于(int i=Row;i>=0;i--)
    {
    如果(ui->clientsList->item(i,0)->text()包含(QString(Info[1]))
    {
    //更新行。
    对于(int u=0;uclientsList->setItem(i,u,新的QTableWidgetItem(QString(Info[u+1]));
    }
    return;//避免插入新行。
    }
    }
    //插入新行。
    Row=ui->clientsList->rowCount()+1;
    用户界面->客户端列表->设置行数(行);
    对于(int i=0;iclientsList->setItem(第1行,i,新的QTableWidgetItem(QString(信息[i+1]));
    }
    }
    
    还不是完整的解决方案,但很少有评论:

    1.管路中可能存在内存泄漏

    ui->clientsList->setItem(i, u, new QTableWidgetItem(QString(Info[u + 1])));
    
    为什么不使用

     ui->clientsList->item(i, u)->setText(QString(Info[u + 1]));
    
    更安全、更清晰


    2.我的理解是,您所依赖的事实是信息的长度与行长度相同,也许值得添加检查?

    已修复,抱歉!尽管社区也会看到它..我的错误!信息.计数()超过了列,因此它提供了访问冲突。您的示例向我显示,谢谢!:DEven仅将其放入更新行部分,而不是插入新行?如果是,您确定信息列表的长度始终相同-可能会不时更改,这就是您偶尔有空单元格的原因?
     ui->clientsList->item(i, u)->setText(QString(Info[u + 1]));