Qt tablewidget的removeRow()这个方法,删除行以后,行中的item是否被自动释放了还是需要手动delete掉

如题,还有clear()方法,虽然clear掉的是item.date还是将item删掉了... 如题,还有clear()方法,虽然clear掉的是item.date还是将item删掉了 展开
 我来答
bad12358
推荐于2017-11-25 · TA获得超过343个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:277万
展开全部

这两个方法都已经将内存delete掉。看SRC就知道了。

http://code.woboq.org/kde/qt4/src/gui/itemviews/qtablewidget.cpp.html

bool QTableModel::removeRows(int row, int count, const QModelIndex &)    
101{    
102   if (count <1|| row <0|| row + count > verticalHeaderItems.count())    
103       return false;    
104
105   beginRemoveRows(QModelIndex(), row, row + count -1);    
106   int i= tableIndex(row,0);    
107   int n= count * columnCount();    
108   QTableWidgetItem *oldItem=0;    
109   for (int j= i; j < n + i; ++j) {    
110       oldItem = tableItems.at(j);    
111       if (oldItem)    
112           oldItem->view =0;    
113       delete oldItem;    
114   }    
115   tableItems.remove(qMax(i,0), n);    
116   for (int v= row; v < row + count; ++v) {    
117       oldItem = verticalHeaderItems.at(v);    
118       if (oldItem)    
119           oldItem->view =0;    
120       delete oldItem;    
121   }    
122   verticalHeaderItems.remove(row, count);    
123   endRemoveRows();    
124   return true;    
125}

void QTableModel::clear()

{

   for (int j = 0; j < verticalHeaderItems.count(); ++j) {

       if (verticalHeaderItems.at(j)) {

           verticalHeaderItems.at(j)->view = 0;

           delete verticalHeaderItems.at(j);; // <--

           verticalHeaderItems[j] = 0;

       }

   }

   for (int k = 0; k < horizontalHeaderItems.count(); ++k) {

       if (horizontalHeaderItems.at(k)) {

           horizontalHeaderItems.at(k)->view = 0;

           delete horizontalHeaderItems.at(k);; // <--

           horizontalHeaderItems[k] = 0;

       }

   }

   clearContents();

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式