QWidget에서 드래그 앤 드롭을 사용하고 있습니다. dragEnterEvent, dragLeaveEvent, dragMoveEvent 및 dropEvent를 다시 구현했으며 제대로 작동합니다.Qt : 아이들에게 드래그 앤 드롭을 위임하는 가장 좋은 방법
내 QWidget에는 다른 QWidget 하위 항목이 있으므로 드래그 앤 드롭도 관리해야합니다. 문제는 부모님 QWidget이 dnd 이벤트를 잡아 내 아이들이 이해하지 못하기 때문입니다. "아이 위젯 위에있을 때, 아이가 dnd 이벤트를 얻는다"고 말하는 가장 좋은 방법은 무엇입니까?
내 위젯은 다음과 같습니다 :
편집
감사
----------------------------------------
| Parent Widget |
| ------------------ |
| | Child Widget | |
| | | |
| ------------------ |
| |
----------------------------------------
내 부모 위젯과 자식 위젯은 같은 클래스의이다.
코드
은 아주 기본적인,이 비슷 : 내 아이의 dragEnterEvent가 호출되지 않습니다DnDWidget::DnDWidget(QWidget* parent)
: QWidget(parent)
{
setAcceptDrops(true);
}
void DnDWidget::dragEnterEvent (QDragEnterEvent* event)
{
qDebug() << "dragEnterEvent";
if (event->mimeData()->hasFormat("foo/bar"))
event->acceptProposedAction();
}
void DnDWidget::dragMoveEvent (QDragMoveEvent* event)
{
qDebug() << "dragMoveEvent";
//do visual feedback stuff
}
. drag-and-drop documentation에서
우리 아이는이 방법들을 호출합니다. 문제는 부모가 이벤트를 catch하므로 내 자식의 dragEnterEvent가 호출되지 않습니다. 지금까지 QApplication :: sendEvent를 통해 이벤트를 직접 다시 보내는 것이 해결책이라고 생각합니다. 그러나 더 좋은 방법이 없는지 궁금합니다. – robix
아이가 먼저 이벤트를 보게됩니다. 함수 서명이 정확히 일치하고 다시 구현 된 메서드가 예상대로 기본 클래스에 의해 호출되는지 확인하십시오. –
그렇습니다. 내 자식 클래스와 부모 클래스는 실제로 같습니다. 부모의 DnD 시각적 피드백을 볼 수 있으며 부모의 dragEnterEvent 및 dragMoveEvent가 호출됩니다. 그러나 자식 QWidget을 초과하면 부모의 dragLeaveEvent가 호출되지 않고 내 자식의 dragEnterEvent도 호출되지 않습니다. – robix