我的源代码↓
ui->tableWidget->setItem(0,7,new QTableWidgetItem(QString::number(3)));
ui->tableWidget->item(0,7)->setTextAlignment(Qt::AlignCenter);
我的方法:
删除ui-> tableWidget-> item(0,7);
如果这个记忆是免费的吗?
如果没有,请告诉我任何其他方法。
答案 0 :(得分:3)
对setItem(...)
的来电将QTableWidgetItem
的所有权转移给QTableWidget
。
虽然QTableWidgetItem
不是QObject
,但它确实会通知QTableWidget
删除它(来自qtablewidget.cpp,Qt 5.1.1):
QTableWidgetItem::~QTableWidgetItem()
{
if (QTableModel *model = (view ? qobject_cast<QTableModel*>(view->model()) : 0))
model->removeItem(this);
view = 0;
delete d;
}
takeItem()
将项目的视图设置为null
,将所有权释放给调用者。
因此,不会调用项目的析构函数model->removeItem(this);
中的上述代码。
这意味着您需要手动删除QTableWidgetItem
但如果在删除项目之前调用takeItem(...)
,则无关紧要。
另见Remove QListWidgetItem: QListWidget::takeItem(item) vs delete item。