如何选择treewidget中的多个项目并删除这些项目?

问题描述:

当我选择treewidget中的项目,然后点击删除按钮,那么只是从treewidget删除最上面的项目
你能改正这个代码吗?
该函数调用connect语句,而在按键如何选择treewidget中的多个项目并删除这些项目?

void TableDockWidget::deleteGroup() { 

QTreeWidgetItem *item = treeWidget->currentItem(); 

QTreeWidgetItem* nextItem = treeWidget->itemBelow(item); 

if (item == NULL) return; 

PeakGroup* group = getSelectedGroup(); //this function is using to      //select items from treewidget 

if (group == NULL) return; 

PeakGroup* parentGroup = group->parent; 

if (parentGroup == NULL) { //top level item 

    deleteGroup(group); //this is using to delete group 
} else if (parentGroup && parentGroup->childCount()) { //this a child item 
    if (parentGroup->deleteChild(group)) { 
     QTreeWidgetItem* parentItem = item->parent(); 
     if (parentItem) { 
      parentItem->removeChild(item); 
      delete(item); 
     } 
    } 
} 
//show NextItem 
if(nextItem) treeWidget->setCurrentItem(nextItem,0); 
return; 

}

//这里,这是选择项目功能代码点击。

PeakGroup* TableDockWidget::getSelectedGroup() { 
QTreeWidgetItem *item = treeWidget->currentItem(); 
if (!item) return NULL; 
QVariant v = item->data(0,Qt::UserRole); 
PeakGroup* group = v.value<PeakGroup*>(); 
if (group != NULL) { return group; } 
return NULL; 

}被删除组

void TableDockWidget::deleteGroup(PeakGroup *groupX) { 
qDebug() << "TableDockWidget::deleteGroup()"; 
if(!groupX) return; 

int pos=-1; 
for(int i=0; i < allgroups.size(); i++) { 
    if (&allgroups[i] == groupX) { 
     pos=i; break; 
    } 
} 
if (pos == -1) return; 

//qDebug() << "Delete pos=" << pos; 
QTreeWidgetItemIterator it(treeWidget); 
while (*it) { 
    QTreeWidgetItem* item = (*it); 
    if (item->isHidden()) { ++it; continue; } 
    QVariant v = item->data(0,Qt::UserRole); 
    PeakGroup* group = v.value<PeakGroup*>(); 
    if (group != NULL and group == groupX) { 
     item->setHidden(true); 

     //Deleteing 
     allgroups.erase(allgroups.begin()+pos); 
     int posTree = treeWidget->indexOfTopLevelItem(item); 
     if (posTree != -1) treeWidget->takeTopLevelItem(posTree); 
     break; 
    } 
    ++it; 
} 

for(unsigned int i = 0; i < allgroups.size(); i++) { 
    allgroups[i].groupId = i + 1; 
} 
updateTable(); 
_mainwindow->getEicWidget()->replotForced(); 

}

+0

我已修正的问题的功能

//代码。 –

+0

请将问题发布给人们看。它可以帮助将来出现类似问题的人。 –

+0

我打算将其作为本主题的答案发布,并在解决自我解决的冷却时间结束后显示为“已解决” –

PeakGroup* TableDockWidget::getSelectedGroup() { 
PeakGroup* group; 
QList<QTreeWidgetItem*>selected = treeWidget->selectedItems(); 
if(selected.size() == 0) return NULL; 
Q_FOREACH (QTreeWidgetItem* item, selected) { 
      QVariant v = item->data(0,Qt::UserRole); 
      group = v.value<PeakGroup*>(); 
      item->setHidden(true); 
     } 
if (group != NULL) { return group; } 
else 
return NULL; 
}