QEvent::Drop 永远不会为 QQuickView 生成事件 window
QEvent::Drop event is never generated for QQuickView window
我正在努力解决 QEvent::Drop
事件从未为我的 QQuickView
window 生成的问题。
我需要实现拖放功能,将文件从资源管理器拖放到 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 代码:
(header)
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);
}
我的同事帮我解决了这个问题。
显然你必须添加一个 DropArea
项目到你的 QML
根文件,然后 QQuickView
将开始接收 QEvent::Drop
事件。
不过,我找不到关于这种情况的任何文档,我也想知道如果你有 QWindow
class 的话,更通用的解决方案是什么。
无论如何,我要结束这个问题。
我正在努力解决 QEvent::Drop
事件从未为我的 QQuickView
window 生成的问题。
我需要实现拖放功能,将文件从资源管理器拖放到 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 代码: (header)
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);
}
我的同事帮我解决了这个问题。
显然你必须添加一个 DropArea
项目到你的 QML
根文件,然后 QQuickView
将开始接收 QEvent::Drop
事件。
不过,我找不到关于这种情况的任何文档,我也想知道如果你有 QWindow
class 的话,更通用的解决方案是什么。
无论如何,我要结束这个问题。