QMimeData* HierarchyTreeControl::mimeData(const QList<QTreeWidgetItem*> items) const { std::list<SortedItems> sortedItems; for (QList<QTreeWidgetItem*>::const_iterator iter = items.begin(); iter != items.end(); ++iter) { QTreeWidgetItem* item = (*iter); sortedItems.push_back(SortedItems(item, GetInternalIndex(item))); } sortedItems.sort(SortByInternalIndex); QList<QTreeWidgetItem* > qSortedItems; for (std::list<SortedItems>::iterator iter = sortedItems.begin(); iter != sortedItems.end(); ++iter) { qSortedItems.push_back(iter->item); } QMimeData* data = QTreeWidget::mimeData(qSortedItems); data->setUserData(TREE_MIME_DATA, new HierarchyTreeControlMimeData(qSortedItems)); return data; }