Илья
Илья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
        i
        innorwallNov. 15, 2024, 6:30 a.m.
        Qt/C++ - Lesson 065. The correspondence of HTTP errors to server response errors in QNetworkAccessManager s Midsummer Classic in Kansas City priligy online pharmacy
        i
        innorwallNov. 15, 2024, 5:44 a.m.
        Qt/C++ - Lesson 039. How to paint stroke in QSqlTableModel by value in the column? Many OPKs would advise users to start using the test strips around day 9 of your cycle, considering day 1 to be the first day of full menstrual flow buy priligy australia
        i
        innorwallNov. 15, 2024, 2:27 a.m.
        Release of C++/Qt and QML application deployment utility CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
        i
        innorwallNov. 14, 2024, 9:26 p.m.
        Qt/C++ - Lesson 031. QCustomPlot – The build of charts with time buy generic priligy We can just chat, and we will not lose too much time anyway
        i
        innorwallNov. 14, 2024, 7:03 p.m.
        Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
        Now discuss on the forum
        t
        tonypeachey1Nov. 15, 2024, 6:04 a.m.
        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
        i
        innorwallNov. 15, 2024, 5:50 a.m.
        добавить qlineseries в функции priligy for sale Gently flush using an ear syringe
        i
        innorwallNov. 11, 2024, 10:55 a.m.
        Всё ещё разбираюсь с кешем. 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
        9AnonimOct. 25, 2024, 9:10 a.m.
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

        Follow us in social networks