Qt 从未为QQuickView窗口生成QEvent::Drop事件

Qt 从未为QQuickView窗口生成QEvent::Drop事件,qt,drag-and-drop,qevent,eventfilter,Qt,Drag And Drop,Qevent,Eventfilter,我正在努力解决一个问题:我的QQuickView窗口从未生成QEvent::Drop事件 我需要实现拖放功能,将文件从资源管理器拖放到QQuickView 如本文所述,我为QQuickViewobjet安装了eventfilter,并在eventfilter()方法中尝试捕获所需事件。当我在视图上拖动一个文件时,将按预期生成QEvent::DragMove。但是当我将文件放到视图中时,不会生成QEvent::drop。而是生成QEvent::DragLeave int main(int argc

我正在努力解决一个问题:我的
QQuickView
窗口从未生成
QEvent::Drop
事件

我需要实现拖放功能,将文件从资源管理器拖放到
QQuickView

如本文所述,我为
QQuickView
objet安装了eventfilter,并在
eventfilter()
方法中尝试捕获所需事件。当我在视图上拖动一个文件时,将按预期生成
QEvent::DragMove
。但是当我将文件放到视图中时,不会生成
QEvent::drop
。而是生成
QEvent::DragLeave

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Filter f;
    QQuickView *view = new QQuickView;
    view->installEventFilter(&f);
    view->show();

    return a.exec();
}
下面是一个(事件)过滤器类代码: (标题)

(来源)

bool Filter::eventFilter(QObject*监视,QEvent*事件)
{
如果(事件->类型()==QEvent::DragMove)
qDebug()类型()==QEvent::Drop)

我的同事帮我解答了这个问题。 显然,您必须将
DropArea
项添加到
QML
根文件中,然后
QQuickView
将开始接收
QEvent::Drop
事件。 但是,我找不到关于这个案例的任何文档,我也想知道如果您使用
QWindow
类,那么对于这个案例,什么是更通用的解决方案。 无论如何,我要结束这个问题

class Filter : public QObject
{
    Q_OBJECT
public:
    Filter(){};
    virtual bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
};
bool Filter::eventFilter(QObject *watched, QEvent *event)
{
    if(event->type() == QEvent::DragMove)
        qDebug() << "it's a drag";
    if(event->type() == QEvent::Drop)
        qDebug() << "it's a drop"; // <<-- Never reaches here
    return QObject::eventFilter(watched, event);
}