Qt5의 비정상적인 드롭 이벤트 무시

3503 단어 C++Qt
이 오류( QTBUG-46287 )가 수정되었습니다.

Qt5에는 모달 위젯이 존재해도 메인 윈도우가 드롭 이벤트를 받아들이는 버그가 있습니다.
  • QTBUG-46287 QMainwindow accepts drop events even when a modal dialog is open

  • 이를 방지하려면 비정상적인 DragEnter 이벤트를 중지하는 이벤트 필터를 만들어 QApplication 에 설치합니다.
  • 활성 모달 위젯이 존재할 때 DragEnter 이벤트 무시
  • 그러나 활성 모달 위젯에 대해 발생한 것은 접수됩니다
  • DragEnter 를 무시하면 드롭도 할 수 없게 되어, 마우스 커서가 드롭을 받아들이는 아이콘이 되지 않습니다.

    구현 예는 다음과 같습니다.
    class DragEventEater : public QObject
    {
    public:
        DragEventEater(QObject* parent): QObject(parent) {}
    protected:
        bool eventFilter(QObject *obj, QEvent *event)
        {
            if (event->type() == QEvent::DragEnter)
            {
                if (QObject* modalWidget = QApplication::activeModalWidget())
                {
                    for (; obj; obj = obj->parent())
                    {
                        if (obj == modalWidget)
                        {
                            return false;
                        }
                    };
                    return true;
                }
            }
            return false;
        }
    };
    

    좋은 웹페이지 즐겨찾기