Илья
ИльяНаурыз 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, 5:53 Т.Қ.

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

      Evgenii Legotckoi
      • Сәуір 2, 2020, 2:46 Т.Ж.

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

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз
        AD

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

        • Нәтиже:50ұпай,
        • Бағалау ұпайлары-4
        m
        • molni99
        • Қаз. 26, 2024, 1:37 Т.Ж.

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

        • Нәтиже:80ұпай,
        • Бағалау ұпайлары4
        m
        • molni99
        • Қаз. 26, 2024, 1:29 Т.Ж.

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

        • Нәтиже:20ұпай,
        • Бағалау ұпайлары-10
        Соңғы пікірлер
        ИМ
        Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
        Evgenii Legotckoi
        Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
        A
        ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas5Шілде 5, 2024, 11:02 Т.Ж.
        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        Енді форумда талқылаңыз
        m
        moogoҚар. 22, 2024, 7:17 Т.Ж.
        Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
        Evgenii Legotckoi
        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        t
        tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
        NSProject
        NSProjectМаусым 4, 2022, 3:49 Т.Ж.
        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

        Бізді әлеуметтік желілерде бақылаңыз