我正在使用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捕获此类事件?
答案 0 :(得分:0)
如果你的意思是说没有费心去实施D& D事件并让javascript直接捕获它,那么 no 。因为QWebView必须接受D& D,然后发出关于任何此类事件的javascript信号。 D&D通过实施JS来处理chrome的原因是chrome启用并实现了D& D事件,然后将其发送给JS。
类似于将任何QtGui元素的viewport
设置为acceptDrop
,否则将不会触发该元素的D& D事件。