И
4 мая 2019 г. 19:28

Как поймать событие нажатия мыши в WebEngineView в QML

#QML, #Qt, #WebEngine, #WebEngineView

Имеется следующего вида код в QML

import QtQuick 2.12
import QtWebEngine 1.8
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Item {
....
    WebEngineView {
        id: infoLayout         
        anchors.fill: parent  
    }
}

В WebEngineView идет просмотр HTML контента. В программе работает таймер, который отвечает за запуск скринсейвера, если в окне ничего не происходит. По задумке таймер должен сбрасываться по касанию экрана пользователем. Стандартная вставка кода (вне блока WebEngineView), типа:

MouseArea {
        anchors.fill: parent

        onPressed: {
            saverVisable.restart()
            console.log("CLICK!!!")
        }

приводит к тому, что перекрывает весь экран WebEngineView и нельзя работать с HTML конентом. Если MouseArea вставить внутри блока WebEngineView, то вовсе ничего не происходит. Пробовал вариант через Action, типа

Action {
    shortcut: "Escape"
    onTriggered: {
        console.log("Escape pressed.");
        saverVisable.restart()
    }
}

Работает, однако, я как понял из доков, в shortcut нельзя задавать события нажатия клавиш мыши (или можно?? поправьте меня пожалуйста, если это не так). Пробовал через onActiveFocusOnPressChanged, он почему-то тоже никак не реагирует, подозреваю что неправильно инициализирую... И еще осталась надежда на runJavaScript, однако его тоже нужно вызывать по наступлению какого либо события, поэтому кусок кода

 onActiveFocusOnPressChanged: {

            runJavaScript ('onClick();', function(result) {
                res = result;
            });

            if (res === "true") {
                saverVisable.restart()
                console.log(res)
            }
        }

тоже никакого результата не дал... Прошу, помогите!

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
3

Добрый день!

Попробуйте модфицировать вариант с MouseArea таким образом

MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true

    onPressed: {
        saverVisable.restart()
        console.log("CLICK!!!")
        mouse.accepted = false
    }
}

Дело в том, что по умолчанию MouseArea забирает все действия и не передаёт на ниже лежащие объекты. А propagateComposedEvents как раз отвечает за включение передачи событий на вниз. Если установить true, то события должны будут передаваться ниже в WebEngineView

И

Евгений, огромное Вам спасибо! Уже три ночи бился с этой проблемой, пробовал и с С++ обвязать через сигналы, и через Java скрипты...в итоге "велосипед на велосипеде" с кривой работой. Забыл написать, что я как раз и начинал с параметра propagateComposedEvents в MouseArea, но он тоже не помогал. Однако вот это казалось бы простая, но важная строчка mouse.accepted = false, которая как светофор разрешает дальнейшую работу мыши на HTML странице! Именно она позволила решить задачу, которая нигде не описана (трехдневный поиск на всех возможных форумах). Спасибо Вам огромное!

Пожалуйста. К сожалению раньше ответить не мог, не было времени просмотреть вопросы на форуме. Будут ещё вопросы, не стесняйтесь задавать их здесь на форуме. Да и если сами кому поможете - тоже будет очень хорошо.

Комментарии

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

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
g
29 мая 2020 г. 14:32
glushchenkoin

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

  • Результат:40баллов,
  • Очки рейтинга-8
АС
26 мая 2020 г. 11:29
Артём Сун-Дун-Чан

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

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 11:33
Митя Нагибин

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

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
31 мая 2020 г. 8:15
IscanderChe

Как установить OpenCV на Qt под Windows

Добавлю от себя: на Windows 10 x64 с MinGW 7.3.0 в CMake надо установить флаг OPENCV_ENABLE_ALLOCATOR_STATS=OFF, тогда всё скомпилится нормально.
29 мая 2020 г. 13:00
Евгений Легоцкой

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Думал так, но похоже что нет. {{ post.votes.likes.user.username }} Это же QuerySet будет, а не отдельный единственный объект {% for vote in post.votes %} {{ vote.user.username …
29 мая 2020 г. 11:43
Владислав Меленчук

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

А как получить имя пользователя, который поставил лайк? Думал так, но похоже что нет. {{ post.votes.likes.user.username }}
29 мая 2020 г. 6:30
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

У меня работает. Исправлял в проекте, который приложен к статье. А что происходит в вашем коде, с учётом места вызова этого кода, я знать не могу ;) Дебажьте и добавляйте условия, кото…
Сейчас обсуждают на форуме
31 мая 2020 г. 6:57
Алексей Внуков

Минимальный размер Item

считайте по размеру включенных элементов, чтоб все помещалась. например у вас всего 2 кнопки, тогда минимальный размер итема будет ширина 1-й кнопки + ширина 2-й кнопки + отступы, и точно также …
f
31 мая 2020 г. 2:24
fryn3

Можно ли сделать в QML таблицу как в Excel?

Можно ли сделать в QML таблицу как в Excel или как сделано в QTableView? Что бы можно было выделять диапазон ячеек, переключатся по таб, изменять размеры строк и столбцов. В QT 5.14 по…
S
РС
30 мая 2020 г. 11:49
Руслан Склюев

QML Как при нажатии на кнопку изменить название окна?

У меня три файла: 1. QML - это Loader и Window 2. QML вход в программу - страница Loader (там есть Switch) 3. QML - MainMenu. Мне нужно в (1), чтобы если на (2) Switch.enable, то …
ДК
29 мая 2020 г. 13:27
Джон Кофи

QMap<> какой ключ лучше

это ясно. Вопрос в том, как быстро мапа будет отрабатывать, если ключом будет QModelIndex. Какой параметр индекса возьмет за ключ. И вот насколько это будет медленнее или быстрее, чем QString пр…
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB