我在Qt 5.7中使用QTreeViewWidget时遇到了问题。
案例1:将项目从窗口小部件2复制/移动到窗口小部件1
仅成功删除拖动的项目,没有其层次结构。
案例2:将小工具1中的项目复制到小工具1
仅成功删除拖动的项目,没有其层次结构。
案例3:将项目从窗口小部件1移动到窗口小部件1
已成功删除拖动的项目及其层次结构。
问题
导致此行为的原因是什么,以及如何修复它以便始终使用它复制/移动项目的层次结构?
编辑1: 在尝试使用" insert"手动重现它之后函数,我认为这可能是由于父母错误,源层次结构的子级保留其原始parrent,而不是被克隆的父级。
样本生成:
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);
窗口小部件(顶部是目的地,底部包含模型):