如何选择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();
}
答
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;
}
我已修正的问题的功能
//代码。 –
请将问题发布给人们看。它可以帮助将来出现类似问题的人。 –
我打算将其作为本主题的答案发布,并在解决自我解决的冷却时间结束后显示为“已解决” –