Qt C++ - 删除 QTableWidget 中的行
Posted
技术标签:
【中文标题】Qt C++ - 删除 QTableWidget 中的行【英文标题】:Qt C++ - Delete row in QTableWidget 【发布时间】:2017-06-08 10:26:49 【问题描述】:我是 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,当我点击这个按钮时,相应的行会消失。但是,每当我单击按钮时,它都会导致“分段错误”。
请指出我的代码有什么问题以及我的程序的解决方案是什么。 谢谢。
【问题讨论】:
连接到按钮的插槽调用removeRow(i)
,其中i=0...4
。但是,在删除一行后,例如i=0
,则第 4 行将无效(索引超出范围),并可能导致分段错误。
【参考方案1】:
问题是由它生成的数组引起的,似乎从数组中删除一个元素会导致索引出现问题。
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););
【讨论】:
以上是关于Qt C++ - 删除 QTableWidget 中的行的主要内容,如果未能解决你的问题,请参考以下文章