2015-05-12 31 views
2

我有一個窗口,其中包含使用Qt Designer設計的3個表格窗口小部件。如何在pyqt中的QtableWidget中捕捉放置事件

表1.所存在

表2.要選定組(AcceptDrops設置爲true)中顯示的所有僱員(將啓用setto真)

表3.顯示員工顯示組

我想趕上表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添加處理程序,但我認爲這並不重要。

不幸的是,這個要求似乎沒有很好的記錄,但我已經觀察到類似的行爲,當我實現了拖放。就個人而言,我通常只是覆蓋有問題的小部件的dragEnterEvent()dragMoveEvent()dropEvent()方法(而不是安裝事件過濾器),但原理是相同的(因此我期望解決方案是相同的)。