ich habe ein Problem beim Durchsuchen meines treeWidget (QTreeWidget*). Ich habe einen QTreeWidget mit einem Toplevel-Item unter dem Children untergeordnet sind (Toplevel_Child.png).
Die Anforderung ist, das jedes Toplevel-Item nur einmal vorkommen darf. Aber auch die Children unter einem Toplevel-Item dürfen nur einmal vorkommen.
In dem folgdenden Code soll dieses Verhalten erstellt werden. Leider versagt der Code, wenn ein Child zu einem Toplevel-Item eingefügt werden soll und es schon ein Toplevel-Item mit dem gleichen Namen gibt (z.B. 'def', siehe Einfuegen_unter_Toplevel.png)
Code: Alles auswählen
void
MyTreeClass::updateTree(QString sTopLevelText, QString sChildText)
{
QList<QTreeWidgetItem*> itemListTopLevel = ui.treeWidget->findItems(sTopLevelText,Qt::MatchExactly,0);
if (itemListTopLevel.isEmpty()) //Wenn kein Toplevel-Item gefunden wurde, dann wird Toplevel mit Child neu angelegt.
{
QTreeWidgetItem* itemTopLevel = new QTreeWidgetItem(ui.treeWidget);
itemTopLevel->setText(0, sTopLevelText); //TopLevel-Item angelegt.
QTreeWidgetItem* itemChild = new QTreeWidgetItem(itemTopLevel);
itemChild->setText(0, sChildText); //Child-Item angelegt.
}
else //Es wurde ein Toplevel-Item gefunden. Es wird der Versuch unternommen, alle children nach sChildText zu durchsuchen.
{
QTreeWidgetItem* itemTopLevel = itemList.at(0); //Es wird dem itemTopLevel das gefundene Toplevel-Item übergeben.
QString test = itemTopLevel->text(0);
QTreeWidget* treeWidgetTopLevel = itemTopLevel->treeWidget(); // Aus dem itemTopLevel wird ein QTreeWidget aufgebaut.
QList<QTreeWidgetItem*> itemListChildren = treeWidgetTopLevel->findItems(sChildText,Qt::MatchExactly,0); //In itemListChildren sollten eigentlich nur die Items
// geschrieben werden die unter dem gefundenen Toplevel-Item stehen. ABER DEM IST LEIDER NICHT SO!! Es werden schon wieder alle Toplevel-Items durchsucht :(
if(itemListChildren.isEmpty())
{
QTreeWidgetItem *itemChild = new QTreeWidgetItem(itemTopLevel);
itemChild->setText(0, mode);
}
}
}
Schönen Gruß
Thomas