2016-11-18 4 views
1

treewidgetでアイテムを選択してから削除ボタンをクリックすると、treewidgetから一番上のアイテムのみを削除します
このコードを修正できますか?ボタン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; 

}ここ

//、項目を選択している機能のコードをクリックしながら、
この関数は、connect文に呼びかけています。

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

私はこのトピックの回答として投稿し、自己解決のための再起動が終わったら「解決済み」と表示するつもりでした –

答えて

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; 
} 
関連する問題