0

我正在为我的窗口QEvent::Drop永远不会生成事件的问题而苦苦挣扎。QQuickView

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

如本文所述我为对象安装了一个事件过滤器QQuickView,并在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();
}

这是一个(事件)过滤器类代码:(标题)

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);
}
4

1 回答 1

0

我的同事帮我解决了这个问题。显然,您必须将一个DropArea项目添加到您的QML根文件,然后QQuickView将开始接收QEvent::Drop事件。不过,我找不到关于这种情况的任何文档,而且我也想知道如果你有一个QWindow班级,什么是更通用的解决方案。无论如何,我要结束这个问题。

于 2017-04-20T15:29:02.950 回答