我正在使用QWidget的拖放功能,我已经重载了dragEnterEvent、dragLeaveEvent、dragMoveEvent和dropEvent函数,而且一切都很顺利。
在我的QWidget中,我有其他的QWidget子控件,并且我希望它们也能够管理拖放事件。问题是,我的父QWidget捕捉了dnd事件,所以我的子QWidget无法获得它。有什么最好的方法来实现“当鼠标在子控件上方时,子控件获取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从未被调用。
setAcceptDrops()
... 我也没有为它使用单独的类,只是在父类的构造函数中像这样调用它:scene = new QGraphicsScene(0, 0, 600, 500);
。 - Joum