拖放QTreeWidget不会带儿童对象

时间:2016-10-20 09:40:32

标签: c++ qt drag-and-drop

我在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);

窗口小部件(顶部是目的地,底部包含模型):

enter image description here

0 个答案:

没有答案