2017-04-19 20 views
0

QQuickView 창이 QEvent::Drop 이벤트가 생성되지 않는 문제로 고민하고 있습니다.QEvent :: Drop 이벤트가 QQuickView 창에 생성되지 않습니다.

익스플로러에서 QQuickView으로 파일을 드롭하려면 drag'n'drop 기능을 구현해야합니다.

post에 설명 된대로 QQuickView objet에 대한 이벤트 필터와 필요한 이벤트를 잡으려고 시도하는 eventFilter() 메서드에 대한 이벤트 필터가 istalled되었습니다. 보기 위로 파일을 끌 때 QEvent::DragMove이 예상대로 생성됩니다. 그러나 파일을 뷰에 놓으면 QEvent::Drop이 생성되지 않습니다. 대신 QEvent::DragLeave이 생성됩니다. (헤더)

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

: 여기

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

그리고

는 (이벤트) 필터 클래스 코드입니다. QML 루트 파일에 DropArea 항목을 추가해야합니다. 그 후 QQuickViewQEvent::Drop 이벤트를 받기 시작할 것입니다. 그래도이 문서에 대한 설명서를 찾을 수 없으며 대신 QWindow 클래스가있는 경우 더 일반적인 해결책이 무엇인지 궁금합니다. 어쨌든이 질문을 닫습니다.