QDrag Class
QDrag 클래스는 MIME 기반의 드래그 앤 드롭 데이터 전송을 지원합니다. 더 보기...
| 헤더: | #include <QDrag> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 상속: | QObject |
공개 함수
| QDrag(QObject *dragSource) | |
| virtual | ~QDrag() |
| Qt::DropAction | defaultAction() const |
| QPixmap | dragCursor(Qt::DropAction action) const |
| Qt::DropAction | exec(Qt::DropActions supportedActions = Qt::MoveAction) |
| Qt::DropAction | exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) |
| QPoint | hotSpot() const |
| QMimeData * | mimeData() const |
| QPixmap | pixmap() const |
| void | setDragCursor(const QPixmap &cursor, Qt::DropAction action) |
| void | setHotSpot(const QPoint &hotspot) |
| void | setMimeData(QMimeData *data) |
| void | setPixmap(const QPixmap &pixmap) |
| QObject * | source() const |
| Qt::DropActions | supportedActions() const |
| QObject * | target() const |
신호
| void | actionChanged(Qt::DropAction action) |
| void | targetChanged(QObject *newTarget) |
정적 공용 멤버
| void | cancel() |
상세 설명
드래그 앤 드롭은 사용자가 애플리케이션 내에서 데이터를 복사하거나 이동할 수 있는 직관적인 방법이며, 많은 데스크톱 환경에서 애플리케이션 간 데이터 복사를 위한 메커니즘으로 사용됩니다. Qt의 드래그 앤 드롭 지원은 드래그 앤 드롭 작업의 세부 사항 대부분을 처리하는 QDrag 클래스를 중심으로 이루어집니다.
드래그 앤 드롭 작업을 통해 전송될 데이터는 ` QMimeData ` 객체에 포함됩니다. 이는 ` setMimeData()` 함수를 사용하여 다음과 같이 지정됩니다.
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);setMimeData()는 QMimeData 객체의 소유권을 QDrag 객체에 할당한다는 점에 유의하십시오. 드래그 앤 드롭 작업이 완료된 후 Qt가 자원을 정리할 수 있도록 하려면, QDrag는 부모 QObject 를 사용하여 힙에 생성되어야 합니다.
드래그가 진행되는 동안 데이터를 표현하기 위해 픽스맵을 사용할 수 있으며, 이 픽스맵은 커서와 함께 드롭 대상 위치로 이동합니다. 이 픽스맵은 일반적으로 전송 중인 데이터의 MIME 유형을 나타내는 아이콘을 표시하지만, setPixmap()을 사용하여 어떤 픽스맵이든 설정할 수 있습니다. setHotSpot() 함수를 사용하여 커서의 핫스팟을 픽스맵의 왼쪽 상단 모서리를 기준으로 한 상대적 위치로 지정할 수 있습니다. 다음 코드는 커서의 핫스팟이 픽스맵 하단 가장자리 중앙을 가리키도록 픽스맵의 위치를 조정합니다:
drag->setHotSpot(QPoint(drag->pixmap().width()/2,
drag->pixmap().height()));참고: X11환경에서 , 핫스팟으로 인해 픽스맵이 커서 바로 아래에 표시되는 경우 픽스맵이 마우스 움직임을 따라가지 못할 수 있습니다.
소스 및 대상 위젯은 ` source()` 및 ` target()`를 통해 확인할 수 있습니다. 이 함수들은 드래그 앤 드롭 작업이 동일한 위젯에서 시작되고 끝났는지 확인하여 특수한 동작을 구현하는 데 자주 사용됩니다.
QDrag는 드래그 앤 드롭 작업 자체만을 처리합니다. 드래그 작업이 언제 시작되는지, 그리고 QDrag 객체를 어떻게 생성하고 사용할지는 개발자가 결정해야 합니다. 특정 위젯의 경우, 사용자가 마우스 버튼을 눌렀는지 확인하기 위해 mousePressEvent()을 재구현하고, QDrag가 필요한지 확인하기 위해 mouseMoveEvent()을 재구현해야 하는 경우가 많습니다.
‘드래그 앤 드롭’, ‘ QClipboard ’, ‘ QMimeData ’, ‘드래그 가능한 아이콘 예제’, ‘드래그 가능한 텍스트 예제’ 및 ‘드롭 위치 예제’도 참조하십시오 .
멤버 함수 문서
[explicit] QDrag::QDrag(QObject *dragSource)
dragSource 로 지정된 위젯에 대한 새로운 드래그 객체를 생성합니다.
[virtual noexcept] QDrag::~QDrag()
드래그 객체를 삭제합니다.
[signal] void QDrag::actionChanged(Qt::DropAction action)
이 신호는 드래그와 관련된 action 가 변경될 때 발생합니다.
targetChanged()도 참조하십시오 .
[static] void QDrag::cancel()
Qt에서 시작한 드래그 작업을 취소합니다.
참고: 이 기능은 현재 Windows 및 X11에서 구현되어 있습니다.
exec()도 참조하십시오 .
Qt::DropAction QDrag::defaultAction() const
이 드래그 작업에 대해 제안된 기본 드롭 동작을 반환합니다.
exec() 및 supportedActions()도 참조하십시오 .
QPixmap QDrag::dragCursor(Qt::DropAction action) const
action 의 드래그 커서를 반환합니다.
setDragCursor()도 참조하십시오 .
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions = Qt::MoveAction)
드래그 앤 드롭 작업을 시작하고, 작업이 완료되면 요청된 드롭 동작을 나타내는 값을 반환합니다. 사용자가 선택할 수 있는 드롭 동작은 ` supportedActions`에 명시되어 있습니다. 기본 제안 동작은 허용된 동작 중에서 ‘이동(Move)’, ‘복사(Copy)’, ‘링크(Link)’ 순서로 선택됩니다.
참고: Linux 및 macOS에서는 드래그 앤 드롭 작업에 다소 시간이 걸릴 수 있지만, 이 함수는 이벤트 루프를 차단하지 않습니다. 작업이 수행되는 동안에도 다른 이벤트는 여전히 애플리케이션으로 전달됩니다. Windows에서는 작업이 진행되는 동안 Qt 이벤트 루프가 차단됩니다.
cancel()도 참조하십시오 .
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
드래그 앤 드롭 작업을 시작하고, 작업이 완료되면 요청된 드롭 동작을 나타내는 값을 반환합니다. 사용자가 선택할 수 있는 드롭 동작은 ` supportedActions`에 지정되어 있습니다.
defaultDropAction 는 사용자가 수정 키를 사용하지 않고 드래그를 수행할 때 어떤 동작이 제안될지 결정합니다.
참고: Linux 및 macOS에서는 드래그 앤 드롭 작업에 다소 시간이 걸릴 수 있지만, 이 함수는 이벤트 루프를 차단하지 않습니다. 작업이 수행되는 동안에도 다른 이벤트는 여전히 애플리케이션으로 전달됩니다. Windows에서는 작업이 진행되는 동안 Qt 이벤트 루프가 차단됩니다. 그러나 Windows에서 QDrag::exec()를 호출하면 GUI의 응답성을 유지하기 위해 processEvents()가 빈번하게 호출됩니다. 드래그 작업이 진행 중인 동안 루프나 작업이 호출되면 드래그 작업이 차단됩니다.
QPoint QDrag::hotSpot() const
커서의 왼쪽 상단 모서리를 기준으로 핫스팟의 위치를 반환합니다.
setHotSpot()도 참조하십시오 .
QMimeData *QDrag::mimeData() const
드래그 객체에 캡슐화된 MIME 데이터를 반환합니다.
setMimeData()도 참조하십시오 .
QPixmap QDrag::pixmap() const
드래그 앤 드롭 작업에서 데이터를 표현하는 데 사용되는 픽스맵을 반환합니다.
setPixmap()도 참조하십시오 .
void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)
action 의 드래그 커서 cursor 를 설정합니다. 이를 통해 기본 네이티브 커서를 재정의할 수 있습니다. action 에서 네이티브 커서 사용으로 되돌리려면 cursor 로 null QPixmap 을 전달하십시오.
참고: IgnoreAction에 대한 드래그 커서 설정은 모든 플랫폼에서 작동하지 않을 수 있습니다. X11 및 macOS에서는 정상 작동하는 것으로 확인되었습니다. Windows는 이를 지원하지 않습니다.
dragCursor()도 참조하십시오 .
void QDrag::setHotSpot(const QPoint &hotspot)
핫스팟의 위치를, 사용되는 픽스맵의 왼쪽 상단 모서리를 기준으로 하여 ` hotspot`로 지정된 지점으로 설정합니다.
참고: X11 환경에서, 핫스팟으로 인해 픽스맵이 커서 바로 아래에 표시되는 경우, 픽스맵이 마우스 움직임을 따라가지 못할 수 있습니다.
hotSpot()도 참조하십시오 .
void QDrag::setMimeData(QMimeData *data)
지정된 MIME data 로 전송할 데이터를 설정합니다. 데이터의 소유권은 QDrag 객체로 이전됩니다.
mimeData()도 참조하십시오 .
void QDrag::setPixmap(const QPixmap &pixmap)
pixmap 를 드래그 앤 드롭 작업에서 데이터를 표현하는 데 사용되는 픽스맵으로 설정합니다. 픽스맵은 드래그가 시작되기 전에만 설정할 수 있습니다.
pixmap()도 참조하십시오 .
QObject *QDrag::source() const
드래그 객체의 소스를 반환합니다. 이는 드래그 앤 드롭 작업이 시작된 위젯입니다.
Qt::DropActions QDrag::supportedActions() const
이 드래그 작업에 대해 가능한 드롭 동작의 집합을 반환합니다.
exec() 및 defaultAction()도 참조하십시오 .
QObject *QDrag::target() const
드래그 앤 드롭 작업의 대상을 반환합니다. 이는 드래그된 객체가 놓인 위젯입니다.
[signal] void QDrag::targetChanged(QObject *newTarget)
이 신호는 드래그 앤 드롭 작업의 대상이 변경될 때 발생하며, 이때 newTarget 가 새로운 대상이 됩니다.
target() 및 actionChanged()도 참조하십시오 .
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.