2015-05-12 3 views
2

У меня есть окно с 3 виджетами таблицы, разработанными с использованием Qt Designer.Как поймать событие drop в QtableWidget в pyqt

Таблица 1. Для групп отображения, которые присутствуют

Таблица 2. Для отображения всех сотрудников (Drag Включено Сетто True)

Таблица 3. работникам отображения в выбранной группе (AcceptDrops значение ИСТИНА)

Я хочу перехватить событие drop в таблице 3., после выполнения капли я хочу запустить функцию. и в то же время он должен избегать дубликатов при падении.

я поставил eventfilters

Table3.installEventFilter(self) 

, но может не в состоянии поймать падение событие.

мой eventfilter Защита как ниже

def eventFilter(self, object, event): 
    if (object is self.TBLW_GroupMembers): 
     if (event.type() == QtCore.QEvent.DragEnter): 
      if event.mimeData().hasUrls(): 
       event.accept() # must accept the dragEnterEvent or else the dropEvent can't occur !!! 
       print "accept" 
      else: 
       event.ignore() 
       print "ignore" 
     if (event.type() == QtCore.QEvent.Drop): 
      print 'drop' 
     return False # lets the event continue to the edit 
    return False 

Я следовал за этот процесс отправил из этого Thread

в состоянии поймать DragEnter но не Drop

ответ

0

Я считаю, что вы также должны обращаться (и принимаем) QtCore.QEvent.DragMove события. Вероятно, вы также должны добавить обработчик для DragLeave, но я думаю, что это менее важно.

К сожалению, это требование, похоже, не очень хорошо документировано, но я наблюдал подобное поведение, когда реализовал drag-and-drop. Лично я обычно просто переопределяю методы , dragMoveEvent() и dropEvent() рассматриваемого виджета (вместо установки фильтра событий), но принцип тот же (и, следовательно, я ожидаю, что решение будет таким же).