1

私は PyQt でアプリケーションに取り組んでいます。HTMLページがロードされるQWebViewでUIを作成しました。

この HTML ページには、ファイルが特定の DIV にドロップされたかどうかを検出する JavaScript コードが含まれています。

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


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

HTMLコードをChromeにロードすると、これはうまく機能します。

アプリケーションを実行し、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 を使用してそのようなイベントを直接キャッチするオプションはありますか?

4

1 に答える 1

0

D&D イベントを実装し、javascript に直接キャッチさせることを気にせずに言うつもりなら、いいえ。QWebView は D&D を受け入れてから、そのようなイベントについて javascript に通知する必要があるためです。JS を実装するだけで D&D が chrome で機能する理由は、chrome が D&D イベントを有効にして実装し、それが JS に通知されるためです。

viewportこれは、QtGui 要素の を に設定するのと似てacceptDropいます。そうしないと、要素の D&D イベントがトリガーされません。

于 2012-10-24T07:03:44.520 に答える