2

QTableWidgetItemsの更新に問題があります。何が間違っているのかわかりません:(

コードと説明。

ステップバイステップの問題。

  1. 最初の挿入=OKで、すべての最初のセルが塗りつぶされます。
  2. 最初に挿入されたアイテムの更新=OK、すべての最初のセルが更新されます。
  3. 2番目の挿入=OKで、すべての2番目のセルが塗りつぶされます。
  4. 2番目に挿入されたアイテムの更新=OK、すべての2番目のセルが更新されます。
  5. 最初に挿入されたアイテムの更新=FAIL、すべての最初のセルが更新されますが、NEXTセルの最初のテーブルは空です。なぜ?

コード:

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])));
    }
}
4

1 に答える 1

2

まだ完全な解決策ではありませんが、コメントはほとんどありません。

1.ラインにメモリリークがある可能性があります

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

使ってみませんか

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

これはより安全で明確です。

2.私の理解では、Infoの長さが行の長さと同じであるという事実に依存しているということですが、おそらくそれをチェックする価値がありますか?

于 2012-12-31T16:40:41.833 に答える