在使用QT想实现拖拽功能的时候,发现了dropEvent没有调用运行,遂查找原因:
首先是网上都说要在dragEnterEvent里面使用event->accept();
但我这边在出现问题之前就已经这样做了:
void CanvasView::dragEnterEvent(QDragEnterEvent *event) {qDebug() << "Drag enter event received"; // 确认事件是否被触发if (event->mimeData()->hasFormat("application/x-moduleitem")) {event->acceptProposedAction(); // 接受拖拽} else {event->ignore(); // 不支持的 MIME 类型}
}
在这之后我看到一篇博客中有问题答案:
博客传送门
在博客中第五条说明了,如果使用的类是QGraphicsView,需要重写一下dragMoveEvent,也就是:
//.h:
void dragMoveEvent(QDragMoveEvent *event) override;
//.cpp:
void CanvasView::dragMoveEvent(QDragMoveEvent *event) {event->accept(); // 接受拖拽事件
}