QWebEngine: синхронное выполнение runJavascript - QEventLoop блокирует вызовы Javascript

Использование Qt 5.15.2 - синхронное выполнение runJavascript.

Проблема:

Я попробовал как отдельное приложение, и он работал нормально, все работает, как ожидалось. Но в моем проекте на eventLoop->exec() функция JS не выполняется (вызывается runJavascript).

      QSharedPointer<QEventLoop> loop = QSharedPointer<QEventLoop>(new QEventLoop());
 req.get()->m_pWebEngineView->page()->runJavaScript(req.get()->m_strJSFuncSignature, [loop](const QVariant& val) {
                    if (loop->isRunning()) {
                        loop->quit();
                    }
                    });
  loop->exec(QEventLoop::AllEvents | QEventLoop::WaitForMoreEvents);

Описание:

Мы создаем ОДНОПоточное приложение, которое читает XML-файл и создает пользовательский интерфейс HTML / Js / Css. Я использую гибкий макет CSS для размещения элементов пользовательского интерфейса. В коде я хочу получить вычисленный размер и позицию синхронно в cpp.

Чтобы добиться синхронной связи с Javascript, я использовал технику цикла локальных событий, упомянутую в QtWebEngine - синхронно выполнить JavaScript, чтобы прочитать результат функцииQtWebEngine - синхронно выполнить JavaScript для чтения результата функции . Приложение зависает, функция Js вообще не вызывается.

Наблюдение:

Без QEventLoop все вызовы runjavascript успешно выполняются один за другим в конце, т.е. после того, как все операторы в программе выполнены.

С QEventLoop вызываются все вызовы runjavascript, но соответствующие функции Js не выполняются. Приложение зависает, потому что не вызывается обратный вызов runjavascript.

Почему это происходит? Пожалуйста, помогите.

1 ответ

Нашел проблему. Я запускал локальный QtEventLoop в функции cpp, которая вызывается из JS. Локальная функция QEventLoop в cpp никогда не завершается, потому что функция Js, вызываемая в локальной QEventLoop, ожидает завершения текущего вызова Js. Вид тупика.

Решение: я поставил вызов, поступающий от Js к cpp, в глобальный цикл событий.

Другие вопросы по тегам