如何在Qtablewidget中删除Item?

时间:2015-12-15 05:18:17

标签: c++ qt qtablewidget

我的源代码↓

ui->tableWidget->setItem(0,7,new QTableWidgetItem(QString::number(3)));
ui->tableWidget->item(0,7)->setTextAlignment(Qt::AlignCenter);

我的方法:

删除ui-> tableWidget-> item(0,7);

如果这个记忆是免费的吗?

如果没有,请告诉我任何其他方法。

1 个答案:

答案 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