3
我使用拖放在QWidget上,我已經重新實現了dragEnterEvent,dragLeaveEvent,dragMoveEvent和dropEvent,並且運行良好。Qt:委託一個拖放到兒童的最佳方式
在我的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永遠不會被調用。
我的孩子確實會調用這些方法。問題是它的父級捕獲事件,所以我的孩子的dragEnterEvent從不被調用。 到目前爲止,我認爲解決方案是通過QApplication :: sendEvent自己重新發送事件,但我想知道是否沒有更好的方法。 – robix
孩子會先看到事件。確保您的函數簽名完全匹配,並且重新實現的方法正如預期的那樣由基類調用。 –
是的,我的孩子班和我的父母班實際上是一樣的。我可以看到父母的DnD視覺反饋,並且我父母的dragEnterEvent和dragMoveEvent被調用,但是當我走到兒童QWidget的上方時,父母的dragLeaveEvent不會被調用,既不是我的孩子的dragEnterEvent。 – robix