如何删除Qtablewidget中的Item?
how to remove Item in Qtablewidget?
我的源码↓
ui->tableWidget->setItem(0,7,new QTableWidgetItem(QString::number(3)));
ui->tableWidget->item(0,7)->setTextAlignment(Qt::AlignCenter);
我的方法:
删除ui->tableWidget->item(0,7);
如果这段内存是空闲的?
如果不行,请告诉我其他方法。
对 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(...)
并不重要。
另见 。
我的源码↓
ui->tableWidget->setItem(0,7,new QTableWidgetItem(QString::number(3)));
ui->tableWidget->item(0,7)->setTextAlignment(Qt::AlignCenter);
我的方法:
删除ui->tableWidget->item(0,7);
如果这段内存是空闲的?
如果不行,请告诉我其他方法。
对 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(...)
并不重要。
另见