Перетаскивание в QTreeWidget не принимает дочерние объекты
В настоящее время я сталкиваюсь с проблемой при использовании QTreeViewWidget в Qt 5.7.
Случай 1: Копировать / Переместить элемент из виджета 2 в виджет 1
Только перетаскиваемый элемент успешно отбрасывается без его иерархии.
Случай 2: Копировать элемент из виджета 1 в виджет 1
Только перетаскиваемый элемент успешно отбрасывается без его иерархии.
Случай 3: переместить элемент из виджета 1 в виджет 1
Перетаскиваемый элемент успешно удален с его иерархией.
Вопрос
Что вызывает это поведение и как его можно исправить, чтобы иерархия Предмета всегда копировалась / перемещалась вместе с ним?
Редактировать 1: После попытки воспроизвести его вручную с помощью функции "insert", я думаю, это может быть связано с ошибкой родительского контроля, когда дочерние элементы исходной иерархии сохраняют свой исходный родитель вместо клонируемого родительского элемента.
Образец поколения:
QList<QTreeWidgetItem *> items;
/*Interlock*/
QTreeWidgetItem* interlock;
interlock = new QTreeWidgetItem((QTreeWidget*)0, QStringList("Interlock"));
interlock->addChild(new QTreeWidgetItem((QTreeWidget*)0, QStringList("Bypass")));
interlock->addChild(new QTreeWidgetItem((QTreeWidget*)0, QStringList("Bypass")));
items.append(interlock);
/*Alarme*/
QTreeWidgetItem* alarme;
alarme = new QTreeWidgetItem((QTreeWidget*)0, QStringList("Alarme"));
alarme->addChild(new QTreeWidgetItem((QTreeWidget*)0, QStringList("Criticité")));
//Ajout de 1 Interlocks
alarme->addChild(interlock->clone());
items.append(alarme);
treeWidgetModels->insertTopLevelItems(0, items);
Виджеты:
treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);
treeWidget->setDragEnabled(true);
treeWidget->viewport()->setAcceptDrops(true);
treeWidget->setDropIndicatorShown(true);
treeWidget->setEditTriggers(QAbstractItemView::SelectedClicked);
treeWidget->setDefaultDropAction(Qt::MoveAction);
treeWidgetModels = new QTreeWidget(this);
treeWidgetModels->setColumnCount(2);
treeWidgetModels->setDragEnabled(true);
treeWidgetModels->setDefaultDropAction(Qt::CopyAction);
Виджет (вверху - пункт назначения, внизу - модели):