我在QWidget上使用拖放功能,我已经重新实现了dragEnterEvent,dragLeaveEvent,dragMoveEvent和dropEvent,并且效果很好。
在我的QWidget中,我有其他QWidget孩子,我希望他们也可以管理拖放。问题是我的父QWidget捕获了dnd事件,所以我的孩子没有得到它。什么是最好的方式来说“当你在儿童小部件之上,孩子得到dnd事件”?
由于
编辑:
我的小部件看起来像这样:
----------------------------------------
| Parent Widget |
| ------------------ |
| | Child Widget | |
| | | |
| ------------------ |
| |
----------------------------------------
我的父窗口小部件和子窗口小部件属于同一类。
代码非常基础,与此类似:
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
}
我的孩子的dragEnterEvent永远不会被调用。
答案 0 :(得分:2)
来自drag-and-drop documentation:
为了能够接收窗口小部件上删除的媒体,请为窗口小部件调用
setAcceptDrops(true)
,然后重新实现dragEnterEvent()
和dropEvent()
事件处理函数。
以下是快速摘要:
如果上述任何一项不成立,则父母将有机会处理掉落。