Comments 13
Какие страшные буквы на первой картинке….
Да, верно, но у меня с шрифтами в системе все очень плохо пока. Пожалуйста, посмотрите на пример на сайте — там должно быть не так страшно (у меня и там страшно).
Некоторые замечания:
1. frame()->addToJavaScriptWindowObject() нужно вызывать не вручную перед загрузкой страницы, а в обработчике сигнала QWebFrame::javaScriptWindowObjectCleared, который вызывается непосредственно перед загрузкой новой страницы. Это позволит перезагружать страницу без опасения, что объекты не внедрятся.
2. Отлаживать страницы можно и нормальным отладчиком. Для этого для страницы нужно установить атрибут DeveloperExtrasEnabled, например так:
page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
После чего отладчик вызывается из контекстного меню страницы.
Подробный список атрибутов и настроек QWebSettings
1. frame()->addToJavaScriptWindowObject() нужно вызывать не вручную перед загрузкой страницы, а в обработчике сигнала QWebFrame::javaScriptWindowObjectCleared, который вызывается непосредственно перед загрузкой новой страницы. Это позволит перезагружать страницу без опасения, что объекты не внедрятся.
2. Отлаживать страницы можно и нормальным отладчиком. Для этого для страницы нужно установить атрибут DeveloperExtrasEnabled, например так:
page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
После чего отладчик вызывается из контекстного меню страницы.
Подробный список атрибутов и настроек QWebSettings
Спасибо Вам большое, я доработал статью, добавив раздел «Отладка JavaScript в гибридном приложении» и удалив соответствующий пункт о недостатках. Может Вы заодно подскажете, как активировать опцию «Always enabled», чтобы отладка запускалась в момент создания QWebView? (у меня она не имеет эффекта и «сбрасывается» при каждом запуске приложения). Буду очень Вам признателен.
У меня тоже не получилось её включить. В качестве решения могу предложить после загрузки страницы в отладчике зайти на страницу Audits, выбрать пункт Reload Page and Audit on Load. В таком случае все брекпоинты и активация отладки сохраняются (до выхода из приложения).
А точно логику приложения приходится реализовывать на JavaScript? — А то для все преимущества данного подхода из-за этого сходят на нет.
Нет не обязательно — так просто озвучено в идее гибридных приложений. В примере JS использовался только для отображения. Как и в случае использования С++ с QML (на мой взгляд) в JS целесообразно реализовывать только функционал, отвечающий за интерфейс, а бизнес-логику (domain model) стоит оставить в C++.
Спасибо, интересно. А не знаете, возможно интегировать webapp-ориентированный JS код в QML приложение не сильно заморачиваясь? Пробовал в лоб, ругалось на window is undefined, а переписывать с привязкой к QML лениво…
Я в лоб не пробовал. Использовал только тот JS, который взаимодействует с объектами QML. Как вариант — использовать QGraphicsProxyWidget. Примеры можно посмотреть в этой ветке.
Но лично мне этот вариант не очень нравится.
Но лично мне этот вариант не очень нравится.
Это круто, спасибо.
Несмотря на то, что для меня смерть десктопных приложений уже кажется неизбежной, но вот такие слияния технологий — могут очень крутые вещи рождать.
Несмотря на то, что для меня смерть десктопных приложений уже кажется неизбежной, но вот такие слияния технологий — могут очень крутые вещи рождать.
«Риск невозможности обратного повторного использования в web после модификации JS.»
В этом случае можно просто воспользоваться веб-сокетами. Будет один и тот же JS-код как для локального приложения, так и для веб-приложения.
Начиная с Qt5.3 они являются встроенными.
В этом случае можно просто воспользоваться веб-сокетами. Будет один и тот же JS-код как для локального приложения, так и для веб-приложения.
Начиная с Qt5.3 они являются встроенными.
Sign up to leave a comment.
Гибридные приложения в Qt на примере использования D3.js