QTreeWidget 仅在顶层拖放

QTreeWidget Drag and Drop only in Top Level

我有一个 QTreewidget,它只在顶层显示对象列表。 所以您可以将其视为列表小部件。 因为QListWidget不支持多列,所以我用的是QTreeWidget。

我是这样控制拖放相关属性的。

dragEnabled  = true

dragDropOverwriteMode = true

dragDropMode = InternalMove

问题是当我在这个 treewidget 中拖放项目时,拖放的项目进入其他项目的子项目,这不是我想要的。我只需要一个顶层,因为我需要的是列表,而不是树。

有什么方法可以实现只重新排序项目吗? 如果没有,你能给我提供其他方式而不是 QTreeWidget 吗?

使用以下代码,我可以使用 QTreeView 制作可排序的、多列的上下文菜单可触发列表。

    ui->sensorTreeView->setColumnCount(2);
    ui->sensorTreeView->setSelectionMode(QAbstractItemView::MultiSelection);
    ui->sensorTreeView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->sensorTreeView->setContextMenuPolicy(Qt::CustomContextMenu);
    ui->sensorTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui->sensorTreeView->setItemsExpandable(false);
    ui->sensorTreeView->setExpandsOnDoubleClick(false);


    ui->sensorTreeView->setDragEnabled(true);
    ui->sensorTreeView->viewport()->setAcceptDrops(true);
    ui->sensorTreeView->setDropIndicatorShown(true);
    ui->sensorTreeView->setDragDropMode(QAbstractItemView::InternalMove);