У меня есть QTreeWidget, который отображает только один корневой узел и только один уровень дочерних узлов. Мне нужно разрешить переупорядочение дочерних узлов. Они никогда не должны переопределяться.QTreeWidget переупорядочивание дочерних элементов путем перетаскивания
Это, как я включаю перетаскивание элементов в QTreeWidget:
ui->levelElements->setSelectionMode(QAbstractItemView::SingleSelection);
ui->levelElements->setDragEnabled(true);
ui->levelElements->viewport()->setAcceptDrops(true);
ui->levelElements->setDropIndicatorShown(true);
ui->levelElements->setDragDropMode(QAbstractItemView::InternalMove);
Корневой элемент вставляется так:
pItem = new QTreeWidgetItem(ui->levelElements);
pItem->setText(0, node.firstChild().nodeValue());
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);
Когда я вставляю ребенка в поле зрения, то объявлено следующим образом:
pItem = new QTreeWidgetItem();
pItem->setText(0, strFileName);
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
pTreeRoot->addChild(pItem);
На данный момент я могу перетащить дочерний элемент и «повторно вставить t "в списке дочерних элементов. Я также могу переместить его на корневой уровень, чего я не хочу.
Я использую QT Creator v3, и поэтому QTreeWidget находится в моем файле определения пользовательского интерфейса.
Я что-то пропустил?
Может быть, это поможет: http://www.qtcentre.org/threads/32354-Qt-ItemIsDropEnabled-ignored-in -dragDropMode-QAbstractItemView-InternalMove – fritzone