Я борюсь с проблемой, что событие 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();
}
А вот код класса (Event)Filter: (заголовок)
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);
}