Фон:
Я портировал приложение, чтобы использовать QWebEngine вместо QWebkit. У меня есть класс-оболочка, который наследуется от QWebEngineView. Я хотел бы иметь возможность перетаскивать файлы / папки в это представление и переводить mimeData в объект JSON. Затем я хочу перетащить новое DropEvent с данными JSON и отбросить оригинальное 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 ().
Задача ещё не решена.
Других решений пока нет …