Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt C++;-删除QTableWidget中的行_C++_Qt_Pointers_Memory Management - Fatal编程技术网

C++ Qt C++;-删除QTableWidget中的行

C++ Qt C++;-删除QTableWidget中的行,c++,qt,pointers,memory-management,C++,Qt,Pointers,Memory Management,我是Qt的新手,我想这样做 void MainWindow::test() { for (int i = 0 ; i < 5 ; ++i) { ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1); ui->tableWidget->setItem(i,0, new QTableWidgetItem(QString("1")));

我是Qt的新手,我想这样做

void MainWindow::test()
{
    for (int i = 0 ; i < 5 ; ++i)
    {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        ui->tableWidget->setItem(i,0, new QTableWidgetItem(QString("1")));
        ui->tableWidget->setItem(i,1, new QTableWidgetItem(QString("1")));
    }

    QPushButton *listB = new QPushButton[5];
    QHBoxLayout *listLayout = new QHBoxLayout[5];
    QWidget* listWidget = new QWidget[5];

    for (int i = 0 ; i <  5 ; ++i)
    {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        listB[i].setText("OK");
        listLayout[i].addWidget(listB + i);
        listWidget[i].setLayout(listLayout + i);
        ui->tableWidget->setCellWidget(i,0,listWidget + i);
        connect(listB + i , &QPushButton::clicked, [=]{ui->tableWidget->removeRow(i);});
    }

}
void主窗口::test()
{
对于(int i=0;i<5;++i)
{
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
ui->tableWidget->setItem(i,0,新的QTableWidgetItem(QString(“1”));
ui->tableWidget->setItem(i,1,新的QTableWidgetItem(QString(“1”));
}
QPushButton*listB=新的QPushButton[5];
QHBoxLayout*listLayout=新的QHBoxLayout[5];
QWidget*listWidget=新的QWidget[5];
对于(int i=0;i<5;++i)
{
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
listB[i].setText(“确定”);
listLayout[i].addWidget(listB+i);
listWidget[i].setLayout(listLayout+i);
ui->tableWidget->setCellWidget(i,0,listWidget+i);
连接(listB+i,&QPushButton::单击,[=]{ui->tableWidget->removeRow(i);});
}
}
我想在QTableWidget的每一行中添加一个QPushButton,当我单击该按钮时,相应的行将消失。然而,每当我点击按钮,它就会导致“分割错误”

请指出我的代码有什么问题,我的程序的解决方案是什么。
谢谢。

问题是由它生成的数组引起的,似乎从数组中删除元素会导致索引出现问题

void MainWindow::test()
{
    ui->tableWidget->setColumnCount(2);

    for (int i = 0 ; i < 5 ; ++i)
    {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        ui->tableWidget->setItem(i,0, new QTableWidgetItem(QString("1")));
        ui->tableWidget->setItem(i,1, new QTableWidgetItem(QString("1")));
    }


    for (int i = 0 ; i <  5 ; ++i)
    {
        QPushButton *listB = new QPushButton;
        QHBoxLayout *listLayout = new QHBoxLayout;
        QWidget* listWidget = new QWidget;
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        listB->setText("OK");
        listLayout->addWidget(listB);
        listWidget->setLayout(listLayout);
        ui->tableWidget->setCellWidget(i,0,listWidget);
        connect(listB, &QPushButton::clicked, [=]{ui->tableWidget->removeRow(i);});
    }

}
void主窗口::test()
{
ui->tableWidget->setColumnCount(2);
对于(int i=0;i<5;++i)
{
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
ui->tableWidget->setItem(i,0,新的QTableWidgetItem(QString(“1”));
ui->tableWidget->setItem(i,1,新的QTableWidgetItem(QString(“1”));
}
对于(int i=0;i<5;++i)
{
QPushButton*listB=新的QPushButton;
QHBoxLayout*listLayout=新的QHBoxLayout;
QWidget*listWidget=新的QWidget;
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
listB->setText(“确定”);
listLayout->addWidget(listB);
listWidget->setLayout(listLayout);
ui->tableWidget->setCellWidget(i,0,listWidget);
连接(listB,&QPushButton::单击,[=]{ui->tableWidget->removeRow(i);});
}
}

问题是由它生成的数组引起的,似乎从数组中删除元素会导致索引出现问题

void MainWindow::test()
{
    ui->tableWidget->setColumnCount(2);

    for (int i = 0 ; i < 5 ; ++i)
    {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        ui->tableWidget->setItem(i,0, new QTableWidgetItem(QString("1")));
        ui->tableWidget->setItem(i,1, new QTableWidgetItem(QString("1")));
    }


    for (int i = 0 ; i <  5 ; ++i)
    {
        QPushButton *listB = new QPushButton;
        QHBoxLayout *listLayout = new QHBoxLayout;
        QWidget* listWidget = new QWidget;
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        listB->setText("OK");
        listLayout->addWidget(listB);
        listWidget->setLayout(listLayout);
        ui->tableWidget->setCellWidget(i,0,listWidget);
        connect(listB, &QPushButton::clicked, [=]{ui->tableWidget->removeRow(i);});
    }

}
void主窗口::test()
{
ui->tableWidget->setColumnCount(2);
对于(int i=0;i<5;++i)
{
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
ui->tableWidget->setItem(i,0,新的QTableWidgetItem(QString(“1”));
ui->tableWidget->setItem(i,1,新的QTableWidgetItem(QString(“1”));
}
对于(int i=0;i<5;++i)
{
QPushButton*listB=新的QPushButton;
QHBoxLayout*listLayout=新的QHBoxLayout;
QWidget*listWidget=新的QWidget;
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
listB->setText(“确定”);
listLayout->addWidget(listB);
listWidget->setLayout(listLayout);
ui->tableWidget->setCellWidget(i,0,listWidget);
连接(listB,&QPushButton::单击,[=]{ui->tableWidget->removeRow(i);});
}
}

连接到按钮的插槽调用
removeow(i)
,其中
i=0…4
。但是,删除一行后,例如
i=0
,则第4行将无效(索引超出范围),并可能导致分段错误。连接到按钮的插槽调用
removeRow(i)
,其中
i=0…4
。但是,删除一行后,例如
i=0
,则第4行将无效(索引超出范围),并可能导致分段错误。