title: PyQt Drop Event without subclassing?
body: <p>This python pyqt code works how I intended.
  But, I don't like having to subclass QLineEdit so that I can detect file drop onto my QLineEdit field.  I like the more elegant and simpler "connect" technique (new style signal/slot handling) that I used to detect text changes to the edit field. </p>
  
  <p>My question:  Is there a signal/slot connect solution for handling drops on the edit field without having to subclass QLineEdit?</p>
  
  <p>Also, it is annoying that I must implement both methods in the subclass... dragEnterEvent &amp; dropEvent to make the drop work!</p>
  
  <pre><code>import sys
  from PyQt4 import QtGui, QtCore
  
  class dropedit(QtGui.QLineEdit):   # subclass 
      def __init__(self, parent=None):
          super(dropedit, self).__init__(parent)
          self.setDragEnabled(True)
          self.setAcceptDrops(True)
  
      def dragEnterEvent(self, event):
          print "dragEnterEvent:"
  
          if event.mimeData().hasUrls():
              event.accept()   # must accept the dragEnterEvent or else the dropEvent can't occur !!!
          else:
              event.ignore()
  
      def dropEvent(self, event):
  
          if event.mimeData().hasUrls():   # if file or link is dropped
  
              urlcount = len(event.mimeData().urls())  # count number of drops
  
              url = event.mimeData().urls()[0]   # get first url
  
              self.setText(url.toString())   # assign first url to editline
  
              #event.accept()  # doesnt appear to be needed
  
  class testDialog(QtGui.QDialog):
      def __init__(self, parent=None):
          super(testDialog, self).__init__(parent)
  
  
          form = QtGui.QFormLayout()
          form.setHorizontalSpacing(0)
  
          myedit = dropedit()
          form.addWidget(myedit)
  
          self.setLayout(form)
          self.setGeometry(300, 300, 400, 0)
          self.setWindowTitle('drop test')
  
          myedit.textChanged.connect(self.editchange)   # new style signal slot connections
  
      @QtCore.pyqtSlot(str)   # int represent the column value
      def editchange(self,data):
          print "editchange:", data
  
  if __name__ == "__main__":
  
      app = QtGui.QApplication([])
      dl = testDialog()
      dl.exec_()
      sys.exit(app.closeAllWindows())
  </code></pre>