Zrobiłem widget bazując na przykładzie DOM Bookmarsk http://doc.qt.nokia.com/latest/xml-dombookmarks.html. Dodałem funkcjonalność dzięki której mogę przesuwać elementy drzewa w górę i w dół bez ponownego zaznaczania elementu:
void MyTree::MoveItemDown()
{
QDomElement elem;
if(!currentElMarked.isNull()){
elem=CurrentItemMarked();
}
else{
return;
}
QDomNode parent=elem.parentNode();
parent.insertAfter(elem,elem.nextSibling());
Refresh();
currentElMarked.clear();
treeModified=1;
emit itemClicked(domElementForItem.key(elem),0);
}
Przesuwanie w górę wygląda bardzo analogicznie. Ale chciałbym żeby przesuwany element był zaznaczony, jednak jeśli dodam na końcu tej metody:
domElementForItem.key(elem)->setSelected(true);
dostaję segfaulta. To samo jak próbuję użyć QTreeWidget::scrollToItem() razem z QTreeWidget::setCurrentItem(). Nie wiem zupełnie czemu tak się dzieje.