2012-10-23 2 views
1

PyQt의 응용 프로그램에서 작업 중입니다. HTML 페이지로로드 된 QWebView로 UI를 만들었습니다.자바 스크립트로 Qt (PyQt) 응용 프로그램에서 데스크탑에서 QWebView로 파일을 끌어다 놓는 방법을 잡는 방법

이 HTML 페이지에는 특정 DIV에서 파일이 삭제되었는지 감지하는 자바 스크립트 코드가 들어 있습니다.

$(document).ready(function() { 
     jQuery.event.props.push('dataTransfer'); 


     $('.input').bind('drop', function(e) { 
      var files = e.dataTransfer.files; 
      alert(files[0].name); 
     }); 
    }); 

Chrome에서 HTML 코드를로드하면 정상적으로 작동합니다.

내 응용 프로그램을 실행하고 D & D는 JavaScript 코드가 실행되지 않는 QWebView의 파일입니다.

파이썬으로 D & D 이벤트를 잡을 수 있도록 QWebView를 확장하고 이벤트를 추가했습니다.

class BrowserWindow(QtWebKit.QWebView): 
def __init__(self, parent): 
    super(BrowserWindow, self).__init__(parent) 
    self.setAcceptDrops(True) 

def dragEnterEvent(self, event): 
    if event.mimeData().hasUrls: 
     event.accept() 
    else: 
     event.ignore() 

def dragMoveEvent(self, event): 
    if event.mimeData().hasUrls: 
     event.setDropAction(QtCore.Qt.CopyAction) 
     event.accept() 
    else: 
     event.ignore() 

def dropEvent(self, event): 
    if event.mimeData().hasUrls: 
     event.setDropAction(QtCore.Qt.CopyAction) 
     event.accept() 
     urls = event.mimeData().urls() 
     print str(urls[0].toLocalFile()) 
    else: 
     event.ignore() 

QWebView에서 자바 스크립트로 이러한 이벤트를 직접 잡을 수있는 옵션이 있습니까?

답변

0

D & D 이벤트를 구현하는 데 방해하지 않고 말하면서 자바 스크립트가 직접 잡아내는 것을 의미한다면, 이 아닙니다. QWebView가 D & D를 수락하고 그런 다음 이벤트에 대해 javascript에 신호를 보내야하기 때문입니다. D & D가 JS 구현만으로 크롬에서 작동하는 이유는 크롬이 D & D 이벤트를 사용 설정하고 구현 한 다음 JS에 신호를 보냈기 때문입니다.

QtGui 요소의 viewportacceptDrop으로 설정하는 것과 비슷합니다. 그렇지 않으면 요소의 D & D 이벤트가 트리거되지 않습니다.

+0

나는 이벤트 잡기를위한 파이썬 코드를 계속해서 기쁘게 생각 하겠지만 지금 당장 내 머리 속에있는 유일한 해결책은 파이썬으로 D & D 이벤트를 잡은 다음 마우스 커서의 X 및 Y 위치를 얻는 것이다. 그런 다음 X, Y 및 파일 이름을 javascript에 다음과 같이 전달하십시오.'self.mainThread.view.page(). mainFrame(). evaluateJavaScript (code)'이것이 올바른 접근 방식이라고 생각하지 않습니다. – Matej

관련 문제