繁体   English   中英

Qt C ++ - 删除QTableWidget中的行

[英]Qt C++ - Delete row in QTableWidget

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

}

我想在QTableWidget的每一行中添加一个QPushButton,当我点击这个Button时,相应的行将消失。 但是,每当我点击按钮它会导致“分段错误”。

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

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

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM