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 仅在顶层拖放的主要内容,如果未能解决你的问题,请参考以下文章
在 PyQt 中使用拖放重新排序 QTreeWidget 中的项目