QTWidgets QTableWidget与segfault崩溃

时间:2017-10-19 18:54:50

标签: c++ qt qtwidgets

我在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"));
    }
}

但每次单击按钮时,它都会出现分段错误。据我所知,item(...)给出了nullptr,但为什么呢?

3 个答案:

答案 0 :(得分:2)

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

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

请查看文档中的overview

另一方面说明:
else的{​​{1}}分支中 if (ui->nodesTable->rowCount() > 1)因此您访问超出范围的rowCount() == 0

答案 1 :(得分:0)

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

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"));
}

答案 2 :(得分:0)

第一次表中没有项目时,如果指针指向非,并且您想要到达它,应用程序就会崩溃!

试试这个;

open()