QTWidgets QTableWidget因segfault而崩溃



我在QPushButton上有这个信号:

void MainWindow::on_addNode_clicked()
{
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
if(ui->nodesTable->rowCount()>1)
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0"));
}
}

但每次我点击按钮时,它都会因分割错误而崩溃。正如我所理解的,项(…)给出了nullptr,但为什么?

由于您没有指定行数和列数,QTableWidget以0行0列开始,添加1行仍然会留下0列。

此外,您必须先通过setItem创建项目,然后才能通过item访问它们

请查看文档中的概述。

另请注意:
if (ui->nodesTable->rowCount() > 1)else分支中rowCount() == 0,因此您访问了超出界限的ui->nodesTable->item(-1, 0)

当您的表中第一次没有项时,如果指针指向非并且您想要访问它,那么您的应用程序就会崩溃!

试试这个;

void MainWindow::on_addNode_clicked()
{
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
if( !ui->nodesTable->rowCount() )
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->setItem(0, 0,new QTableWidgetItem(QString("New Item")));
}
}

您必须设置列计数,并且必须手动设置项:

ui->nodesTable->setColumnCount(1);
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
ui->nodesTable->setItem(ui->nodesTable->rowCount()-1, 0, new QTableWidgetItem("0") );
if(ui->nodesTable->rowCount()>1)
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0"));
}

最新更新