• 14540阅读
  • 8回复

void QTreeWidget::removeItemWidget ( QTreeWidgetItem * item, int column ) 不能删除item问题 [复制链接]

上一主题 下一主题
离线feiying888
 

只看楼主 正序阅读 楼主  发表于: 2009-07-04
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-08-15) —
程序如下:

QTreeWidget *pTreeWidget = new QTreeWidget(this);

QTreeWidgetItem *pTreeWidgetItem = new QTreeWidgetItem(pTreeWidget);

pTreeWidget->removeItemWidget(pTreeWidgetItem, 0);       //删除不了pTreeWidgetItem。为什么呢?

pTreeWidget->takeTopLevelItem(0);                        //能删除pTreeWidgetItem


用QTreeWidgetItem * QTreeWidget::takeTopLevelItem ( int index )可以删除item。

用void QTreeWidget::removeItemWidget ( QTreeWidgetItem * item, int column )就删除不了!

不知道是我没哪没用对? 还是QT的bug?  请大家帮忙看看,谢谢

离线米饭拌面

只看该作者 8楼 发表于: 2011-08-15
突然看到以前自己发的回复、、、关于这个QTreeWidget删除item、、、
其实是这样:它自己删除item不是通过QTreeWidget去删除而是,通过QTreeWidgetItem去删除item
也就是说找到item的parentitem然后removeChild 这样去删除item。

removeItemWidget 是删除设置在item里的widget而已,看名字也看出来了。
QQ:32336134
离线米饭拌面

只看该作者 7楼 发表于: 2011-04-28
我看了下源码,removeItemWidget的确是给删除掉了oldItemWidget。不用delete了,你delete估计会出错。
QQ:32336134
离线米饭拌面

只看该作者 6楼 发表于: 2011-04-28
先不说要不要delete,如果你QFontComboBox创建的时候指定parent为treeWidget的话,你不delete也不会泄漏到最后还是会释放的。至于removeItemWidget,你可以研究一下源码,看它里面到底做了什么动作,是否将原来的widget释放掉了。
QQ:32336134
离线weihua1984

只看该作者 5楼 发表于: 2011-04-27
开始是 QFontComboBox *fontBox = new QFontComboBox();
treeWidget->setItemWidget(item,1,fontBox);

使用完成后
treeWidget->removeItemWidget(item,1);
调用该函数后用不用delete fontBox?
不delete的话,是不是会出现内存泄露

离线weihua1984

只看该作者 4楼 发表于: 2011-04-27
removeItemWidget函数不是用来删除QtreeWidgetItem的。
与之对应的函数是addItemWidget,
必须是先添加再删除ItemWidget
查手册吧
离线feiying888

只看该作者 3楼 发表于: 2009-07-07
我不是想删除一行,是想删除某一指定的item, 用removeItemWidget行吗?   我试了半天没删除成功。
请教楼上,你试过能删除吗?
离线machou

只看该作者 2楼 发表于: 2009-07-07
removeItemWidget的第二个参数是column,takeTopLevelItem的参数是index,removeItemWidget肯定不能删除一行了
离线machou

只看该作者 1楼 发表于: 2009-07-07
直接delete就可以了
快速回复
限100 字节
 
上一个 下一个