QTableWidget更新项目

时间:2012-12-31 16:02:25

标签: c++ qt

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

代码和解释。

一步一步的问题。

  1. 首次插入= OK,所有第一个单元格都已填满。
  2. 首先更新插入的项目=确定,所有第一个单元格都会更新。
  3. 在第二次插入时= OK,所有第二个单元格都被填满。
  4. 更新第二个插入的项目=确定,更新所有第二个单元格。
  5. 更新第一个插入的项目= FAIL,更新所有第一个单元格,但NEXT单元格的第一个表格为空。为什么?
  6. 代码:

    void MainWindow::fillTable(QList<QByteArray> Info)
    {
        int Row = ui->clientsList->rowCount() - 1; //Starts from 0.
    
        //Check if client row already exists.
        for(int i = Row; i >= 0; i--)
        {
            if(ui->clientsList->item(i, 0)->text().contains(QString(Info[1])))
            {
                //Update row.
                for(int u = 0; u < Info.count() - 1; u++)
                {
                    ui->clientsList->setItem(i, u, new QTableWidgetItem(QString(Info[u + 1])));
                }
    
                return; //avoid new row insertion.
            }
        }
    
        //Insert new row.
        Row = ui->clientsList->rowCount() + 1;
        ui->clientsList->setRowCount(Row);
        for(int i = 0; i < Info.count() - 1; i++)
        {
            //Fill rows.
            ui->clientsList->setItem(Row - 1, i, new QTableWidgetItem(QString(Info[i + 1])));
        }
    }
    

1 个答案:

答案 0 :(得分:1)

还没有完整的解决方案,但很少有评论:

1.行内可能存在内存泄漏

ui->clientsList->setItem(i, u, new QTableWidgetItem(QString(Info[u + 1])));

为什么不使用

 ui->clientsList->item(i, u)->setText(QString(Info[u + 1]));

更安全,更清晰。

2.我的理解是你依赖于Info与行长度相同的事实,或许值得加上检查?