这里有张桌子:
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();
发生段错误。
我究竟做错了什么?如何解决?该过程的机制是什么?
答案非常简单。表中声明了 4 列
但是我使用了其中的 5 个,它紧跟在这一行之后。接下来我尝试访问第 5 列
, 但只有 4 列.
从这里事实证明, 当我尝试访问时, 我得到一个段错误, 因为返回了 nullptr.