我有一个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删除它们只会导致我的程序崩溃,并且每次删除行后添加更多行会导致我的内存使用率急剧上升。
我已经坚持了几天,所以任何帮助都表示赞赏!