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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Добрый день.
WebEngineView имеет свойство url , в документации на QML для свойств обычно не описывают отдельно сигналы, но как правило свойства имеют и сигналы. Думаю, что вам нужно попробовать навесить обработчик на сигнал изменения этого свойства.
Евгений, спасибо большое - то что нужно! Буду иметь ввиду...сколько всего перерыл - про это вообще ни слова...видимо разработчики Qt подумали, что и так должны быть все в теме)))
Я думаю, что это где-то описано, но в такой глубине документации и максимум в самых базовых вещах, то есть отдельно в классах этого не пишут, просто потому, что придётся писать для каждого класса половину базовой документации.
Но обычно все, кто вдумчиво пользовался макросом Q_PROPERTY в C++ части, уже в курсе того, что из себя представляют свойства. Но согласен, вы не первый, кто мне говорит, что подобный момент не описан в документации.