Илья
Илья31 марта 2020 г. 5:02

WebEngineView : некорректно работает onLinkHovered при использовании на сенсорных устройствах

#QML, #Qt, #WebEngineView

Здравствуйте!
Задача стоит такая. В 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
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

3
Evgenii Legotckoi
  • 31 марта 2020 г. 5:09
  • (ред.)
  • Ответ был помечен как решение.

Добрый день.

WebEngineView имеет свойство url , в документации на QML для свойств обычно не описывают отдельно сигналы, но как правило свойства имеют и сигналы. Думаю, что вам нужно попробовать навесить обработчик на сигнал изменения этого свойства.

WebEngineView {
    id: infoLayout                                                  

    onUrlChanged: {
        console.log(url)
    }
}
    Илья
    • 1 апреля 2020 г. 17:53

    Евгений, спасибо большое - то что нужно! Буду иметь ввиду...сколько всего перерыл - про это вообще ни слова...видимо разработчики Qt подумали, что и так должны быть все в теме)))

      Evgenii Legotckoi
      • 2 апреля 2020 г. 2:46

      Я думаю, что это где-то описано, но в такой глубине документации и максимум в самых базовых вещах, то есть отдельно в классах этого не пишут, просто потому, что придётся писать для каждого класса половину базовой документации.
      Но обычно все, кто вдумчиво пользовался макросом Q_PROPERTY в C++ части, уже в курсе того, что из себя представляют свойства. Но согласен, вы не первый, кто мне говорит, что подобный момент не описан в документации.

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        AD

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:50баллов,
        • Очки рейтинга-4
        m
        • molni99
        • 26 октября 2024 г. 11:37

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:80баллов,
        • Очки рейтинга4
        m
        • molni99
        • 26 октября 2024 г. 11:29

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:20баллов,
        • Очки рейтинга-10
        Последние комментарии
        i
        innorwall12 ноября 2024 г. 9:12
        Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
        i
        innorwall12 ноября 2024 г. 5:23
        QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
        i
        innorwall12 ноября 2024 г. 2:50
        Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
        i
        innorwall12 ноября 2024 г. 1:19
        Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
        i
        innorwall12 ноября 2024 г. 0:55
        PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
        Сейчас обсуждают на форуме
        i
        innorwall12 ноября 2024 г. 7:56
        добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
        i
        innorwall11 ноября 2024 г. 21:55
        Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
        9
        9Anonim25 октября 2024 г. 19:10
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
        ИМ
        Игорь Максимов3 октября 2024 г. 14:05
        Реализация навигации по разделам Спасибо Евгений!

        Следите за нами в социальных сетях