QDrag Class
QDrag 클래스는 MIME 기반 드래그 앤 드롭 데이터 전송을 지원합니다. 더 보기...
Header: | #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 객체에 할당합니다. QDrag는 드래그 앤 드롭 작업이 완료된 후 Qt가 정리할 수 있도록 부모 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 에 지정되어 있습니다. 기본 제안 동작은 허용된 동작 중에서 다음 순서로 선택됩니다: 이동, 복사, 링크.
참고: 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 에 대한 기본 커서 사용으로 되돌리려면 QPixmap 을 cursor 으로 null을 전달합니다.
참고: 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()도 참조하세요 .
© 2025 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.