拖放

Full-Stack-python / 2023-08-27 / 原文

NodeGui 支持拖放功能。

为了使小部件能够接受掉落,您需要调用

widget.setAcceptDrops(true);

在此之后,您可以收听一些QEvent,例如,和DragEnterDragMoveDragLeaveDrop

完整的代码如下所示:

widget.setAcceptDrops(true);

widget.addEventListener(WidgetEventTypes.DragEnter, (e) => {
    let ev = new QDragMoveEvent(e);
    console.log('dragEnter', ev.proposedAction());
    let mimeData = ev.mimeData();
    mimeData.text(); //文本作品检查
    console.log('mimeData', {
        hasColor: mimeData.hasColor(),
        hasHtml: mimeData.hasHtml(),
        hasImage: mimeData.hasImage(),
        hasText: mimeData.hasText(),
        hasUrls: mimeData.hasUrls(),
        html: mimeData.html(),
        text: mimeData.text(),
    }); //MIME数据工作检查
    let urls = mimeData.urls(); //获取 QUrls
    for (let url of urls) {
        let str = url.toString();
        console.log('url', str); //事件中的注销网址
    }
    ev.accept(); //丢弃事件,这对于接受进一步的事件至关重要
});
widget.addEventListener(WidgetEventTypes.DragMove, (e) => {
    let ev = new QDragMoveEvent(e);
    console.log('dragMove');
});
widget.addEventListener(WidgetEventTypes.DragLeave, (e) => {
    console.log('dragLeave', e);
    let ev = new QDragLeaveEvent(e);
    ev.ignore(); //离开时忽略事件
    console.log('ignored', ev);
});
widget.addEventListener(WidgetEventTypes.Drop, (e) => {
    let dropEvent = new QDropEvent(e);
    let mimeData = dropEvent.mimeData();
    console.log('dropped', dropEvent.type());
    let urls = mimeData.urls();
    for (let url of urls) {
        let str = url.toString();
        console.log('url', str); //检查掉落数据的示例。
    }
});