2012-10-30 28 views
1

我想使用拖放来重新排列QComboBox中的项目。我尝试这样做:PyQt4:使用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

通过设置适当的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_() 
+0

完美,谢谢! – ChrisB