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();
}
削除される関数のコードを私は私の問題を修正。 –
人が見るための答えを投稿してください。これは、同様の問題を抱える将来の人々を助けることができます。 –
私はこのトピックの回答として投稿し、自己解決のための再起動が終わったら「解決済み」と表示するつもりでした –