【问题标题】:QTWidgets QTableWidget crash with segfaultQTWidgets QTableWidget 因段错误而崩溃
【发布时间】:2017-10-19 18:54:50
【问题描述】:

我在 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 但为什么呢?

【问题讨论】:

    标签: c++ qt qtwidgets


    【解决方案1】:

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

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

    请查看文档中的overview。

    另一方面:
    在您的if (ui->nodesTable->rowCount() > 1) 的else 分支中 rowCount() == 0,因此您访问了超出范围的ui->nodesTable->item(-1, 0)。

    【讨论】:

      【解决方案2】:

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

      试试这个;

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 但是我在 QTCreator 的 UI 设计器中创建了列。如果存在,我需要从另一行设置值。
        猜你喜欢
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多