【问题标题】:QEvent::Drop event is never generated for QQuickView window永远不会为 QQuickView 窗口生成 QEvent::Drop 事件
【发布时间】:2017-09-16 09:24:32
【问题描述】:

我正在努力解决我的QQuickView 窗口永远不会生成QEvent::Drop 事件的问题。

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

正如post 中所述,我为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);
}

【问题讨论】:

    标签: qt drag-and-drop qevent eventfilter


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2012-01-05
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多