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

标签 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")));
        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,当我点击这个按钮时,相应的行将消失。但是,每当我单击按钮时,它都会导致“段错误”。

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

最佳答案

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

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

}

关于c++ - Qt C++ - 删除 QTableWidget 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433185/

相关文章:

c++ - 设置与设置函数参数同名的私有(private)数据成员

c++ - con.txt 和 C++

c++ - 在下面的代码中 tr ("%1") 和 .arg() 在这里吗?

c - 我如何使用指针在该数组(函数)内部移动而不是数组订阅

c - 是什么导致 realloc() 下一个大小无效错误?

c++ - 当然,我在使用 boost :replace_all. 完整性检查时做错了什么?

c++ - APInt(unsigned numBits, uint64_t val, bool isSigned = false) 中的参数 bool 有何用途?

qt - 对于 Qt 中的信号和槽,delete 和 deleteLater 如何工作?

c++ - 使用另一个类的类

C:编译错误 - "expected expression"并且没有写其他内容?