Как стать автором
Обновить

Комментарии 13

Какие страшные буквы на первой картинке….
Да, верно, но у меня с шрифтами в системе все очень плохо пока. Пожалуйста, посмотрите на пример на сайте — там должно быть не так страшно (у меня и там страшно).
Некоторые замечания:
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. В таком случае все брекпоинты и активация отладки сохраняются (до выхода из приложения).
Спасибо, для этого видимо нужно будет выполнить еще и пункт 1 ваших замечаний. В представленном коде «Reload» приводит к пустой странице.
А точно логику приложения приходится реализовывать на JavaScript? — А то для все преимущества данного подхода из-за этого сходят на нет.
Нет не обязательно — так просто озвучено в идее гибридных приложений. В примере JS использовался только для отображения. Как и в случае использования С++ с QML (на мой взгляд) в JS целесообразно реализовывать только функционал, отвечающий за интерфейс, а бизнес-логику (domain model) стоит оставить в C++.
Вот и я удивился. QML используем только как интерфейс, в пример только как интерфейс, а вот для JS иначе и это странно. Если уж бизнес-логика на JS, то зачем что-то писать на плюсах?

Рад, что это не так
Спасибо, интересно. А не знаете, возможно интегировать webapp-ориентированный JS код в QML приложение не сильно заморачиваясь? Пробовал в лоб, ругалось на window is undefined, а переписывать с привязкой к QML лениво…
Я в лоб не пробовал. Использовал только тот JS, который взаимодействует с объектами QML. Как вариант — использовать QGraphicsProxyWidget. Примеры можно посмотреть в этой ветке.
Но лично мне этот вариант не очень нравится.
Это круто, спасибо.

Несмотря на то, что для меня смерть десктопных приложений уже кажется неизбежной, но вот такие слияния технологий — могут очень крутые вещи рождать.
«Риск невозможности обратного повторного использования в web после модификации JS.»
В этом случае можно просто воспользоваться веб-сокетами. Будет один и тот же JS-код как для локального приложения, так и для веб-приложения.
Начиная с Qt5.3 они являются встроенными.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории