我有一个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);
在这一点上,我可以拖动一个子项目和“re-inser t“在子项目列表中。我也可以将它移到根级别 - 我不想要。
我正在使用QT Creator v3,所以QTreeWidget在我的UI定义文件中。
我在这里错过了什么吗?
也许这将帮助:http://www.qtcentre.org/threads/32354-Qt-ItemIsDropEnabled-ignored-in -dragDropMode-QAbstractItemView-InternalMove – fritzone