PyQt4:使用QComboBox拖放时,项目消失

时间:2012-10-30 14:29:28

标签: drag-and-drop qt4 pyqt4 qcombobox

我想使用拖放来重新排列QComboBox中的项目。我试过这个:

from PyQt4.QtGui import QApplication, QComboBox, QAbstractItemView

a = QApplication([''])
c = QComboBox()
c.addItem('a')
c.addItem('b')
c.addItem('c')
c.addItem('d')

view = c.view()
view.setDragDropMode(QAbstractItemView.InternalMove)

c.show()
c.raise_()

a.exec_()

但是,拖动另一个项目顶部的项目会删除拖动的项目 - 我希望该项目移动到放置位置的上方/下方。我做错了吗?

1 个答案:

答案 0 :(得分:1)

需要通过设置相应的item flags来删除每个组合项作为放置目标。

这是实现这一目标的一种方法:

import sys
from PyQt4 import QtCore, QtGui

app = QtGui.QApplication(sys.argv)
combo = QtGui.QComboBox()

model = QtGui.QStandardItemModel()
for text in 'One Two Three Four'.split():
    item = QtGui.QStandardItem(text)
    item.setFlags(item.flags() & ~QtCore.Qt.ItemIsDropEnabled)
    model.appendRow(item)

combo.setModel(model)
combo.view().setDragDropMode(QtGui.QAbstractItemView.InternalMove)
combo.show()

app.exec_()