Илья
ИльяMay 4, 2019, 8:28 p.m.

Как поймать событие нажатия мыши в 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)
            }
        }

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

3
Evgenii Legotckoi
  • May 9, 2019, 3:27 a.m.
  • The answer was marked as a solution.

Добрый день!

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

MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true

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

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

    Илья
    • May 9, 2019, 5:06 a.m.

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

      Evgenii Legotckoi
      • May 9, 2019, 5:10 a.m.

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

        Comments

        Only authorized users can post comments.
        Please, Log in or Sign up
        AD

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:50points,
        • Rating points-4
        m

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:80points,
        • Rating points4
        m

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:20points,
        • Rating points-10
        Last comments
        ИМ
        Игорь МаксимовNov. 22, 2024, 11:51 a.m.
        Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
        Evgenii Legotckoi
        Evgenii LegotckoiOct. 31, 2024, 2:37 p.m.
        Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
        A
        ALO1ZEOct. 19, 2024, 8:19 a.m.
        Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь МаксимовOct. 5, 2024, 7:51 a.m.
        Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas5July 5, 2024, 11:02 a.m.
        QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        Now discuss on the forum
        Evgenii Legotckoi
        Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        t
        tonypeachey1Nov. 15, 2024, 6:04 a.m.
        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
        NSProject
        NSProjectJune 4, 2022, 3:49 a.m.
        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
        9
        9AnonimOct. 25, 2024, 9:10 a.m.
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

        Follow us in social networks