2017-04-19 2 views
0

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

答えて

0

私の同僚は、この質問で私を手伝いました。 QMLルートファイルにDropAreaアイテムを追加する必要があります。その後、QQuickViewQEvent::Dropイベントの受信を開始します。 しかし、私はこのケースではドキュメントを見つけることができませんし、あなたはQWindowクラスを代わりに持っていた場合、これにはもっと一般的な解決方法が何か不思議です。とにかく、私はこの質問を閉じます。

関連する問題