Visual studio QTableWidget removeRow未实际删除

Visual studio QTableWidget removeRow未实际删除,visual-studio,qt,Visual Studio,Qt,我有一个QTableWidget,里面填充了不同的QWidget,因此每当我从服务器收到消息要添加/更新它们时,我都会这样做: ui->tableWidget->setRowCount(data.count()); ui->tableWidget->setCellWidget(data.count() - 1, 0, new QCheckBox("Enabled")); ui->tableWidget->setCellWidget(data.count() -

我有一个QTableWidget,里面填充了不同的QWidget,因此每当我从服务器收到消息要添加/更新它们时,我都会这样做:

ui->tableWidget->setRowCount(data.count());
ui->tableWidget->setCellWidget(data.count() - 1, 0, new QCheckBox("Enabled"));
ui->tableWidget->setCellWidget(data.count() - 1, 1, new QLineEdit("ADD"    ));
ui->tableWidget->setCellWidget(data.count() - 1, 2, new QComboBox(         ));
ui->tableWidget->setCellWidget(data.count() - 1, 3, new QLineEdit("232434" ));
ui->tableWidget->setCellWidget(data.count() - 1, 4, new QComboBox(         ));
for (int i = 0; i < TW_CNT; i++)
{
  connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentIndexChanged(int)), this, SLOT(cboxchanged(int)));
  if( i == 0)
  {
    //stuff
    connect((QCheckBox*)ui->tableWidget->cellWidget(cnt, i), SIGNAL(stateChanged(int)), this, SLOT(checkchanged(int)));
  }
  if( i == 1)
  {
    //stuff
    connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentIndexChanged(int)), this, SLOT(cboxchanged(int)));
    connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentTextChanged(QString)), this, SLOT(cboxedited(QString)));
  }
  //....
}
然后,使用这些小部件,我用如下方法发送信号/插槽连接它们:

ui->tableWidget->setRowCount(data.count());
ui->tableWidget->setCellWidget(data.count() - 1, 0, new QCheckBox("Enabled"));
ui->tableWidget->setCellWidget(data.count() - 1, 1, new QLineEdit("ADD"    ));
ui->tableWidget->setCellWidget(data.count() - 1, 2, new QComboBox(         ));
ui->tableWidget->setCellWidget(data.count() - 1, 3, new QLineEdit("232434" ));
ui->tableWidget->setCellWidget(data.count() - 1, 4, new QComboBox(         ));
for (int i = 0; i < TW_CNT; i++)
{
  connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentIndexChanged(int)), this, SLOT(cboxchanged(int)));
  if( i == 0)
  {
    //stuff
    connect((QCheckBox*)ui->tableWidget->cellWidget(cnt, i), SIGNAL(stateChanged(int)), this, SLOT(checkchanged(int)));
  }
  if( i == 1)
  {
    //stuff
    connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentIndexChanged(int)), this, SLOT(cboxchanged(int)));
    connect(((QComboBox*)ui->tableWidget->cellWidget(cnt, i)), SIGNAL(currentTextChanged(QString)), this, SLOT(cboxedited(QString)));
  }
  //....
}
for(int i=0;itableWidget->cellWidget(cnt,i)),信号(currentIndexChanged(int)),这个,插槽(cboxchanged(int));
如果(i==0)
{
//东西
连接((QCheckBox*)ui->tableWidget->cellWidget(cnt,i),信号(stateChanged(int)),这个,插槽(checkchanged(int));
}
如果(i==1)
{
//东西
连接((QComboBox*)ui->tableWidget->cellWidget(cnt,i)),信号(currentIndexChanged(int)),这个,插槽(cboxchanged(int));
连接((QComboBox*)ui->tableWidget->cellWidget(cnt,i)),信号(currentTextChanged(QString)),此,插槽(CBoxEded(QString));
}
//....
}
稍后,当我想从tableWidget中删除内容时,我会在不再需要的行上调用removeRow。这里的问题是,这些小部件似乎仍然是ui->tableWidget->viewport()的子部件,即使我对它们调用->deleteLater(),它们也不会被删除。用delete删除它们只会导致我的程序崩溃,而在每次删除行之后添加更多的行会导致我的内存使用量猛增


我已经被困在这几天了,所以任何帮助都是感激的

每当我在Qt中使用表或列表等,并且需要永久删除一行时,我使用
qdeletall(ui->table->selectedItems())从未遇到过任何问题,如果出现此问题,请告诉我works@AngryDuck因此,这实际上并没有崩溃,但它也不会删除子项,当我这样做时:
ui->tableWidget->selectRow(I);qdeletall(ui->tableWidget->selectedItems());ui->tableWidget->removeRow(i)实际上没有删除任何内容,我认为这是因为我在QTableWidget中使用QWidgets而不是QTableWidgeItems。。。我读到的所有内容都说,当使用removeRow时,QT应该为您处理删除操作,但我认为它没有这样做,因为我使用的是小部件,而不是项目(QTableWidget能够处理)。