• 20648阅读
  • 6回复

QtreewidgetItem删除问题 [复制链接]

上一主题 下一主题
离线bornku
 

只看楼主 倒序阅读 楼主  发表于: 2010-10-27
— 本帖被 XChinux 执行加亮操作(2010-10-27) —
为什么选中Qtreewidget的一行删除时,在删除时中断错误,怎么解决啊?各位帮帮忙。

方案1、 connect(ui->action_schema_2,SIGNAL(triggered()),pTreeWidget, SLOT(clear()));
  • bug描述:当选中一条QtreeWidgetItem时,出现ASSERT failure in QList<T>::at: "index out of range", file d:\3rd\qt4.7.0\include\qtcore\../../src/corelib   /tools/qlist.h, line 455

方案2、connect(ui->action_schema_2,SIGNAL(triggered()),this, SLOT(clearTreeWidget()));
  1. void MainWindow::clearTreeWidget()
  2. {
  3.     QTreeWidgetItem *pa=pTreeWidget->invisibleRootItem();
  4.     for (int i=pa->childCount()-1;i>=0;--i)
  5.     {
  6.         recursive_delete_treeWidgetItem(pa->child(i));
  7.     }
  8.     pTreeWidget->clear();
  9. }
  10. void MainWindow::recursive_delete_treeWidgetItem(QTreeWidgetItem *pa)
  11. {
  12.     for (int i=pa->childCount()-1; i>=0; --i)
  13.     recursive_delete_treeWidgetItem(pa->child(i));
  14.     delete pa;
  15. }
  • bug描述: 同方案1
[ 此帖被bornku在2010-11-02 14:30重新编辑 ]
离线wxj120bw

只看该作者 1楼 发表于: 2010-10-27
QTreeWidgetItem *pItem = pTreeWidget->currentItem();
delete pItem;  

第二条语句有问题吧,你怎么确定释放pltem空间后,treewidget就能补显示这个对象。用removeItemWidget 方法。
离线wangdan
只看该作者 2楼 发表于: 2010-10-29
中断错误可能是你的指针没有分配内存,试试这个
QTreeWidgetItem *pItem =new QTreeWidgetItem ;

我也是新手,希望对你有帮助
离线bornku

只看该作者 3楼 发表于: 2010-11-02
回 2楼(wangdan) 的帖子
我要删除的是已经存在的Item
离线bornku

只看该作者 4楼 发表于: 2010-11-02
回 1楼(wxj120bw) 的帖子
我要删除整个Item,而removeItemWidget方法的声明是removeItemWidget ( QTreeWidgetItem * item, int column )  
离线foxyz

只看该作者 5楼 发表于: 2010-11-02
二楼已经回答很清楚了!但是二楼的方法不对。你要删除选中的Item要这么做:
如果该item是toplevelItem,就直接takeTopLevelItem( int index )。
如果是子节点就:
QTreeWidgetItem* child = currentItem();
QTreeWidgetItem* parent = currentItem()->parent();
if(parent) {
    parent->removeChild(child);
}
离线foxyz

只看该作者 6楼 发表于: 2010-11-02
另外,如果你是使用signal-slot的话
void    currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous )
void    itemChanged ( QTreeWidgetItem * item, int column )
void    itemClicked ( QTreeWidgetItem * item, int column )
这几个signal都好用。也都提供了当前的item.我都不知道你哪里来的triggered,难道是一个action?
快速回复
限100 字节
 
上一个 下一个