Форум сайта python.su
Доброго дня.
Хочу сделать перетаскивание элементов внутри виджета мышью, а при нажатой кнопке Ctrl - копирование.
не получается, вот что есть:
class CategoriesTreeWidget(QtGui.QTreeWidget): def __init__(self, parent, func): QtGui.QTreeWidget.__init__(self, parent) self.func_ = func self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) self.setDropIndicatorShown(True) def dropEvent(self, event): if event.keyboardModifiers () == QtCore.Qt.ControlModifier: event.setDropAction(QtCore.Qt.CopyAction) else: event.setDropAction(QtCore.Qt.MoveAction) event.acceptProposedAction ()
def dragMoveEvent(self, event): if event.keyboardModifiers () == QtCore.Qt.ShiftModifier: self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) else: self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) QtGui.QTreeWidget.dragMoveEvent(self, event)
Офлайн
def dropEvent(self, event): if event.keyboardModifiers () == QtCore.Qt.ControlModifier: event.setDropAction(QtCore.Qt.CopyAction) self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) else: event.setDropAction(QtCore.Qt.MoveAction) self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) QtGui.QTreeWidget.dropEvent(self, event) item = self.itemAt(event.pos()) self.emit(QtCore.SIGNAL("dropAccepted"), item)
Офлайн
Используйте QAbstractItemView.indexAt(event.pos()) — в начале, и в конце. По индексу получите item.
Офлайн