QTableWidget removeRow实际上没有删除

时间:2015-05-20 14:16:19

标签: visual-studio qt

我有一个QTableWidget,里面装满了不同的QWidgets,每当我从服务器收到一条消息来添加/更新它们时,我都是这样的:

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

稍后当我想从tableWidget中删除东西时,我通过在不再需要的行上调用removeRow来实现。这里的问题是这些小部件似乎仍然保留了ui&gt; tableWidget-&gt; viewport()的子代,即使我在它们上面调用 - &gt; deleteLater(),它们也永远不会被删除。使用delete删除它们只会导致我的程序崩溃,并且每次删除行后添加更多行会导致我的内存使用率急剧上升。

我已经坚持了几天,所以任何帮助都表示赞赏!

0 个答案:

没有答案