如何使用自定义项目小部件拖放 QListWidget 项目?

Posted

技术标签:

【中文标题】如何使用自定义项目小部件拖放 QListWidget 项目?【英文标题】:How can I drag drop QListWidget items with custom item widgets? 【发布时间】:2014-07-20 12:18:24 【问题描述】:

如果我使用QListWidget 默认项目,我可以拖放它的项目(感谢setDragDropMode),但如果我使用自定义项目小部件(setItemWidget)我无法拖放。我该如何解决?

这是我用自定义小部件项目制作列表的代码:

    alist = QListWidget()
    alist.setDragDropMode(QAbstractItemView.InternalMove)

    for i in range(20):
        itemWidget = QPushButton('Test' + str(i))
        item = QListWidgetItem('item ' + str(i))
        item.setSizeHint(QSize(0,100))
        alist.addItem(item)
        alist.setItemWidget(item, itemWidget)

    vbox = QVBoxLayout()
    vbox.addWidget(QPushButton())
    vbox.addWidget(alist)
    self.setLayout(vbox)

【问题讨论】:

Fabrico :您使用 listWidget 而不是 listView 是他们的任何具体原因吗? @thecreator232 我实际上不知道两者之间的区别。 QT 上的新功能。我正在尝试制作一个图层组件(文本、预览图标、可见性按钮)并尝试将它们放入一个支持拖放的可滚动组件中。所以我不需要手动编写所有代码。 【参考方案1】:

检查这是否可行。

alist = QListWidget()
alist.setAcceptDrops(True)
alist.setDragEnabled(True)
alist.setDragDropMode(QAbstractItemView.InternalMove)

for i in range(20):
    itemWidget = QPushButton('Test' + str(i))
    item = QListWidgetItem('item ' + str(i))
    item.setSizeHint(QSize(0,100))
    alist.addItem(item)
    alist.setItemWidget(item, itemWidget)

vbox = QVBoxLayout()
vbox.addWidget(QPushButton())
vbox.addWidget(alist)
self.setLayout(vbox)

【讨论】:

以上是关于如何使用自定义项目小部件拖放 QListWidget 项目?的主要内容,如果未能解决你的问题,请参考以下文章

在 QListWidget 之间拖放自定义小部件项目

QListWidget 拖放与通过 setItemWidget 设置的自定义小部件

找不到有关如何在自定义小部件中使用 ListView 的正确布局选项

如何通过鼠标拖放来更改布局中小部件的顺序?

通过拖放项目制作类似列表的小部件的最简单方法是啥?

树视图小部件中的自定义项目