如何捕获正在拖动文件的事件&使用javascript在Qt(PyQt)应用程序中从桌面删除到QWebView

时间:2012-10-23 23:34:41

标签: python qt pyqt qtwebkit qwebview

我正在使用PyQt中的应用程序。我用QWebView创建了UI,它加载了一个HTML页面。

此HTML页面包含一个javascript代码,用于检测某个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代码,这可以正常工作。

如果我在QWebView中运行我的应用程序和D& D文件,则javascript代码无法执行。

我扩展了QWebView并添加了事件,因此我可以使用python捕获D& D事件。

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中直接使用javascript捕获此类事件?

1 个答案:

答案 0 :(得分:0)

如果你的意思是说没有费心去实施D& D事件并让javascript直接捕获它,那么 no 。因为QWebView必须接受D& D,然后发出关于任何此类事件的javascript信号。 D&D通过实施JS来处理chrome的原因是chrome启用并实现了D& D事件,然后将其发送给JS。

类似于将任何QtGui元素的viewport设置为acceptDrop,否则将不会触发该元素的D& D事件。