본문 바로가기
놀기/Qt

Qt QLabel로 Drag & Drop Widget 만들기

by Hi~ 2022. 10. 11.

목차

     

     

    0. DragAndDropTest 생성


    이것은 기본이나 패스...

     

     

     

    1. QDragDropLabel 추가


    아래와 같이 QDragDropLabel을 만든다.

    qdragdroplabel.h

    #ifndef QDRAGDROPLABEL_H
    #define QDRAGDROPLABEL_H
    
    #include <QObject>
    #include <QWidget>
    #include <QLabel>
    #include <QFont>
    
    class QDragDropLabel : public QLabel
    {
        Q_OBJECT
    
    public:
        QDragDropLabel(QWidget *parent=nullptr): QLabel(parent){
            QFont font = parent->font();
            font.setPixelSize(12);
            setFont(font);
        }
    
        void dragEnterEvent(QDragEnterEvent *event);
        void dragLeaveEvent(QDragLeaveEvent *event);
        void dragMoveEvent(QDragMoveEvent *event);
        void dropEvent(QDropEvent *event);
        void mousePressEvent(QMouseEvent *ev);
    };
    
    #endif // QDRAGDROPLABEL_H

     

    qdragdroplabel.cpp

    #include "qdragdroplabel.h"
    #include <QDebug>
    #include <QDropEvent>
    #include <QMimeData>
    #include <QApplication>
    #include <QStringList>
    #include <QDragMoveEvent>
    #include <QDragEnterEvent>
    
    void QDragDropLabel::dragEnterEvent(QDragEnterEvent *e)
    {
        if (e->mimeData()->hasUrls()) {
            e->acceptProposedAction();
        }
    }
    
    void QDragDropLabel::dragLeaveEvent(QDragLeaveEvent *e)
    {
        Q_UNUSED(e);
    }
    
    void QDragDropLabel::dragMoveEvent(QDragMoveEvent *e)
    {
        Q_UNUSED(e);
    }
    
    void QDragDropLabel::dropEvent(QDropEvent *e)
    {
        foreach (const QUrl &url, e->mimeData()->urls()) {
            QString fileName = url.toLocalFile();
            qDebug() << "Dropped file:" << fileName;
        }
    }
    
    void QDragDropLabel::mousePressEvent(QMouseEvent *e)
    {
        Q_UNUSED(e);
    }

     

    만든 QDragDropLabel을 만들고 이 Widget을 사용하기 위해 아래와 같이 등록한다.

     

    UI 화면에서 오른쪽 마우스를 클릭하여 "Promoted widgets..."로 들어가서

     

    QDragDropLabel을 추가한다. QLabel을 이것으로 변경하여 사용할 예정이니 Base class name은 QLabel을 선택한다.

     

     

     

    2. QDragDropLabel widget 추가


    QLabel을 추가 후, 오른쪽 마우스를 클릭하면 아래와 같이 QDragDropLabel을 선택할 수 있다.

     

    이렇게 하면 아래와 같이 QDragDropLabel로 바뀐다.

     

     

    3. 실행


    아래와 같이 실행 후, 파일을 Drag & Drop 하면 메시지를 확인할 수 있다. "+복사" 글자를 다른 문구로 바꾸고 싶은데 거기까지는 안 해봤음.ㅋㅋ

     

     

     

    https://github.com/busymankr/DragAndDropTest

     

    GitHub - busymankr/DragAndDropTest

    Contribute to busymankr/DragAndDropTest development by creating an account on GitHub.

    github.com

     

    댓글