SIFE
SIFE

Reputation: 5695

Updating row on QTableWidget cause segmentation fault

I have QTableWidget connected with totale() slot and itemChanged(QTableWidgetItem *) signal, in my table I am tracking user change on column 3 and 5.

void Store::totale(QTableWidgetItem *x)
{
    int row = x->row();
    float sum = 0;
    float ttl = 0;
    QTableWidgetItem *item = NULL;
    if (ui->storeTab->currentIndex() == 1)
    {
        if(x->column() == 5)
        {
            item = new QTableWidgetItem;
            sum = ui->itemsTableWidget->item(row, 3)->text().toFloat() * x->data(0).toFloat();
            item->setText(QString::number(sum, 'f', 2));
            ui->itemsTableWidget->setItem(x->row(), 6, item);
            sum = 0;
            for (int i = 0; i < ui->itemsTableWidget->rowCount(); ++i)
            {
                ttl += ui->itemsTableWidget->item(i, 5)->text().toFloat();
                sum += ui->itemsTableWidget->item(i, 6)->text().toFloat();
            }
            ui->totaleBill0->setText(QString::number(sum, 'f', 2));
            ui->ttlBill0->setText(QString::number(ttl, 'f', 2));
        }
        else if(x->column() == 3)
        {
            item = new QTableWidgetItem;
            sum = x->data(Qt::DisplayRole).toFloat() * ui->itemsTableWidget->item(row, 5)->text().toFloat();
            item->setText(QString::number(sum, 'f', 2));
            ui->itemsTableWidget->setItem(x->row(), 6, item);
            sum = 0;
            for (int i = 0; i < ui->itemsTableWidget->rowCount(); ++i)
            {
                ttl += ui->itemsTableWidget->item(i, 5)->text().toFloat();
                sum += ui->itemsTableWidget->item(i, 6)->text().toFloat();
            }
            ui->totaleBill0->setText(QString::number(sum, 'f', 2));
            ui->ttlBill0->setText(QString::number(ttl, 'f', 2));
        }
    }
}

My problem if I make change on column 5, it works fine, but when I made change on column 3 I get segmentation fault.

Upvotes: 1

Views: 1240

Answers (1)

Aleksandar
Aleksandar

Reputation: 3661

Try to turn off cellChanged(int,int) signal while adding new rows (disconnect and connect it). In that way you will not have situation to read from cells that are not filled

Upvotes: 1

Related Questions