Как выполнить действие в Qml каждый раз, когда пользователь касается экрана?
Я пишу приложение для встроенного устройства с сенсорным экраном linux, используя Qt и Qml.
Мне нужно реализовать экран блокировки, который появляется после 30 секунд бездействия.
Для этого я реализовал таймер в C++, который изменяет состояние программы после таймаута.
Можно ли обновлять этот таймер в глобальном масштабе каждый раз, когда пользователь касается экрана, так что мне не нужно вызывать слот таймеров start()
в каждом осязаемом элементе моей программы?
I также хотелось бы обновить этот таймер, даже когда пользователь касается части экрана, где нет кнопок / интерактивных элементов.
Что-то вроде этого главного.qml:
Rectangle {
id: mainRect
width: 800
height: 480
//something like this (oversimplified) pseudo code:
onGlobalUserTouch {
timers.startLockTimer()
}
//end pseudocode
Loader {
id: mainLoader
anchors.fill: parent
source: "FirstPage.qml"
Behavior on opacity {PropertyAnimation{duration:250}}
onLoaded: secondLoader.source = ""
}
states:[
State {
name:"SecondPage"
when: (mainCppClass.state == PanelStates.SECOND_PAGE)
PropertyChanges {
target: mainLoader
source: "SecondPage.qml"
}
}
]
}
Все, что я смог найти в интернете, - это как реализовать это в iOS или Android.1 ответ:
Если mainRect является вашим корневым компонентом, вы можете просто запустить таймер в его области мыши.
// touch area of your root component MouseArea { anchors.fill: parent onClicked: { timers.startLockTimer(); } // child component Rectangle { color: "yellow" x: 50; y : 50 width: 100; height: 100 } }
Это не отменяет наследственные области мыши. Таким образом, если вы коснетесь области, где нет кнопок/интерактивных элементов, ваш startLockTimer будет вызван.