Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2013 16:33:52

Ashedu
Зарегистрирован: 2012-11-23
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeWidget Drag&Drop

Доброго дня.

Хочу сделать перетаскивание элементов внутри виджета мышью, а при нажатой кнопке 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)
 
Тоже не вышло.
Что я делаю не так? В чем соль и суть?

Офлайн

#2 Окт. 22, 2013 17:03:27

Ashedu
Зарегистрирован: 2012-11-23
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

QTreeWidget Drag&Drop

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)

C перемещением разобрался.
Теперь другой вопрос, как получить инфо о том какой item был перетащен и куда он был перетащен или скопирован?

Офлайн

#3 Окт. 26, 2013 22:04:20

Gennady
Зарегистрирован: 2013-09-19
Сообщения: 27
Репутация: +  1  -
Профиль   Отправить e-mail  

QTreeWidget Drag&Drop

Используйте QAbstractItemView.indexAt(event.pos()) — в начале, и в конце. По индексу получите item.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version