2015-12-15 69 views
0

我的源代碼↓如何移除Qtablewidget中的Item?

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

我的方法:

刪除UI-> tableWidget->項(0,7);

如果此內存是免費的?

如果沒有,讓我知道任何其他方法。

+0

查看http://doc.qt.io/qt-4.8/qtablewidget.html#takeItem – Danh

+0

刪除項目工作得很好。如果你想在不刪除的情況下刪除該項目,那麼takeItem()很有用(否則它會泄漏)。 –

回答

1

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);中的上述代碼將不會被調用。

+0

我的Qt版本4.8 ...不能使用 –

+0

好嗎? QTableWidgetItem析構函數代碼在Qt版本的qtablewidget.cpp文件中看起來是否有所不同? –