QTreeWidget 仅在顶层拖放

Posted

技术标签:

【中文标题】QTreeWidget 仅在顶层拖放【英文标题】:QTreeWidget Drag and Drop only in Top Level 【发布时间】:2021-08-07 07:31:20 【问题描述】:

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

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

dragEnabled  = true

dragDropOverwriteMode = true

dragDropMode = InternalMove

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

有没有什么方法可以只对物品进行重新排序? 如果没有,您能否提供其他方式代替 QTreeWidget?

【问题讨论】:

你试过 QTableWidget 吗? 哦,我用 QTreeWidget 解决了这个问题。谢谢你。 【参考方案1】:

使用以下代码,我可以使用 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);

【讨论】:

以上是关于QTreeWidget 仅在顶层拖放的主要内容,如果未能解决你的问题,请参考以下文章

关于qt中的QTreeWidget的拖放问题

如何阻止 QTreeWidget 在拖放时创建重复项

在 PyQt 中使用拖放重新排序 QTreeWidget 中的项目

QTreeWidgetItem 的拖放不能正常工作

使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView

Qt QTreeWidget节点的添加+双击响应+删除详解(转)