2012-10-30 29 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