QQuickView
ウィンドウでQEvent::Drop
イベントが生成されないという問題を解決するのに苦労しています。QEvent :: DropイベントはQQuickViewウィンドウ用に生成されません
エクスプローラからQQuickView
にファイルをドロップするには、ドラッグアンドドロップ機能を実装する必要があります。
postに記載されているように、私はQQuickView
オブジェクトのイベントフィルタと、必要なイベントをキャッチしようとしているeventFilter()
メソッドのイベントフィルタをistallしました。ビュー上にファイルをドラッグすると、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();
}
そして、ここで(イベント)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);
}