WebEngineView : некорректно работает onLinkHovered при использовании на сенсорных устройствах
Здравствуйте!
Задача стоит такая. В QML через объект WebEngineView происходит просмотр HTML страниц. Необходимо при переходе по ссылке записывать новый адрес в массив (ListModel). Проблема состоит в том, что чтение url после загрузки страницы, например в конструкции типа
onLoadingChanged: { if (loadRequest.status === WebEngineLoadRequest.LoadSucceededStatus) { // здесь читаем url загруженной страницы... } }
не дает ожидаемого результата. Считывается старый url адрес, а не новый.
Однако есть замечательный сигнал onLinkHovered, где используя выше конструкцию можно добиться желаемого результата:
onLinkHovered: { tmpUrl = hoveredUrl } onLoadingChanged: { // LoadSucceededStatus пришлось поменять на LoadStartedStatus, иначе tmpUrl пусто if (loadRequest.status === WebEngineLoadRequest.LoadStartedStatus) { console.log("infoLayout: onLoadingChanged tmpUrl = "+tmpUrl) // в tmpUrl хранится как раз уже новый адрес страницы - ура, товарищи! } }
Казалось бы happyEnd...но на сенсорных устройствах с мультитачем tmpUrl в onLinkHovered всегда пуст как при переходе по ссылкам, так и при наведении на них...Для обработки событий мыши на странице использовал как MouseArea, так и MultiPointTouchArea, результат один - на сенсорных устройствах tmpUrl пустая, при работе на ноутбуке все как надо....
Есть у кого идеи в чем может быть дело? Прикладываю блок кода WebEngineView ниже:
WebEngineView { id: infoLayout anchors.fill: parent MultiPointTouchArea { anchors.fill: parent onReleased: { console.log("infoLayout: MultiPointTouchArea onReleased!!!") } } settings.pluginsEnabled: true settings.playbackRequiresUserGesture: false profile.httpCacheType: WebEngineProfile.NoCache focus: true onLinkHovered: { tmpUrl = hoveredUrl } onLoadingChanged: { if (loadRequest.status === WebEngineLoadRequest.LoadStartedStatus) { console.log("infoLayout: onLoadingChanged tmpUrl = "+tmpUrl) if (tmpUrl.length>0){ listModelHistoryInfo.addPath(tmpUrl) } } } }
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Геній
- Қыр. 13, 2024, 12:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
- torgaev_2024
- Қыр. 8, 2024, 6:20 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Добрый день.
WebEngineView имеет свойство url , в документации на QML для свойств обычно не описывают отдельно сигналы, но как правило свойства имеют и сигналы. Думаю, что вам нужно попробовать навесить обработчик на сигнал изменения этого свойства.
Евгений, спасибо большое - то что нужно! Буду иметь ввиду...сколько всего перерыл - про это вообще ни слова...видимо разработчики Qt подумали, что и так должны быть все в теме)))
Я думаю, что это где-то описано, но в такой глубине документации и максимум в самых базовых вещах, то есть отдельно в классах этого не пишут, просто потому, что придётся писать для каждого класса половину базовой документации.
Но обычно все, кто вдумчиво пользовался макросом Q_PROPERTY в C++ части, уже в курсе того, что из себя представляют свойства. Но согласен, вы не первый, кто мне говорит, что подобный момент не описан в документации.