Qt: Segfault при конвертации данных из QString в Double

126
15 ноября 2020, 10:30

Есть таблица:

    ui->tableWidget->setColumnCount(4);
    for (int i = 0; i < db.gList->Goods->size(); i++)
    {
        ui->tableWidget->insertRow(i);
        ui->tableWidget->setItem(i, 0 , new QTableWidgetItem(QString::number(i)));
        ui->tableWidget->setItem(i, 1 , new QTableWidgetItem(QString::number(db.gList->Goods->at(i).GID))); //i, db.gList->Goods->at(i).gName, db.gList->Goods->at(i).gAmount, db.gList->Goods->at(i).gPrice
        ui->tableWidget->setItem(i, 2 , new QTableWidgetItem(db.gList->Goods->at(i).gName));
        ui->tableWidget->setItem(i, 3 , new QTableWidgetItem(QString::number(db.gList->Goods->at(i).gAmount)));
        ui->tableWidget->setItem(i, 4 , new QTableWidgetItem(QString::number(db.gList->Goods->at(i).gPrice)));
    }

Есть обработка клика по таблице в форме

    void MainWindow::on_tableWidget_itemClicked(QTableWidgetItem *item)
    {
        QString strText;
        int row = item->row();
        for (int i = 0 ; i < ui->tableWidget->columnCount(); i++)
        {
            strText += ui->tableWidget->item(row, i)->text() + " ";
        }
        int _gsid;
        int _gAmount;
        double _gPrice;
        _gsid = ui->tableWidget->item(row, 1)->text().toInt();
        _gAmount = ui->tableWidget->item(row, 3)->text().toInt();
        _gPrice = ui->tableWidget->item(row, 4)->text().toDouble();
        db.bList->AddItem(_gsid, _gAmount, _gPrice);
      //  ui->listWidget_2->addItem(ui->tableWidget->item(row, 2)->text());
        //qDebug() << strText;
    }

Когда вызывается

_gPrice = ui->tableWidget->item(row, 4)->text().toDouble();

происходит сегфолт.

Что я делаю не так? Как это исправить? Какова механика процесса?

Answer 1

Ответ до безобразия прост. было объявлено 4 столбца в таблице

ui->tableWidget->setColumnCount(4);

Но я использовал их 5, это следует в цикле, сразу за этой строкой. Далее я пытаюсь обратиться к 5ому столбцу

_gPrice = ui->tableWidget->item(row, 4)->text().toDouble();

, но столбцов всего 4. Отсюда получается что при попытке обращения я получаю сегфолт ибо возвращается nullptr.

READ ALSO
Подключить MariaDB на С++

Подключить MariaDB на С++

IDE CLion может переходить в библиотеку #include <mariadb/mysqlh>, то есть, файл найден, однако проект не компилируется: /home/nerd/CLionProjects/ISPstats/main

114
Сортировка списка фамилий

Сортировка списка фамилий

Это мой код по сортировке фамилий, Входят фамилии, пробегаются по функции Алфавит, и потом им присваивается соответствующее значение в массиве

106
Работа с двумя объектами из одной функции

Работа с двумя объектами из одной функции

Так происходит работа с двумя формами из разных функций

115