背景:
我移植了一个使用QWebEngine而不是QWebkit的应用程序。我有一个从QWebEngineView继承的包装器类。我希望能够将文件/文件夹拖放到此视图上,并将mimeData转换为JSON对象。然后,我想使用JSON数据重新放置一个新的DropEvent并丢弃原始的dropevent。
这曾经与QWebkit一起使用,但与QWebEngine一起使用时,当我调用基类dropEvent()时,原始的dropEvent正在通过,而自定义dropEvent不在HTML端。
代码段:
void CWebViewWrapper::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData = event->mimeData();
QMimeData *newMimeData = new QMimeData();
newMimeData->setText(generateJSON(mimeData));
QDropEvent* newDropEvent = new QDropEvent(event->pos(), event->dropAction(), newMimeData, event->mouseButtons(), event->keyboardModifiers());
event->setDropAction(Qt::DropAction::IgnoreAction);
event->ignore(); //have tried accept() as well, same result
//this JSON payload doesn't arrive, but the original dropEvent does
QWebEngineView::dropEvent(newDropEvent);
}
结果:
结果是自定义JSON有效负载没有到达HTML端,并且QWebEngineView实际上导航到放置的文件夹。这种设置是否不再适用于QWebEngineView?
问题:
可以对这个概念进行调整以使其起作用吗?还是我必须放弃所有这些并走另一条路线? HTML具有多个放置区,因此我无法轻松地使用runJavascript()直接调用事件处理程序。