C++ 如何在用户每次触摸屏幕时在Qml中执行操作?
我正在使用Qt和Qml为嵌入式linux触摸屏设备编写应用程序。C++ 如何在用户每次触摸屏幕时在Qml中执行操作?,c++,qt,touch,qml,embedded-linux,C++,Qt,Touch,Qml,Embedded Linux,我正在使用Qt和Qml为嵌入式linux触摸屏设备编写应用程序。 我需要实现一个锁定屏幕,该屏幕在30秒不活动后显示。 为此,我在C++中实现了一个计时器,它在超时后改变程序的状态。p> 是否可以在用户每次触摸屏幕时在全局范围内刷新此计时器,这样我就不必调用程序中每个可触摸元素中的计时器“start()插槽” 即使用户触摸屏幕上没有按钮/交互元素的部分,我也希望刷新此计时器 类似于main.qml的内容: Rectangle { id: mainRect width: 800
我需要实现一个锁定屏幕,该屏幕在30秒不活动后显示。
为此,我在C++中实现了一个计时器,它在超时后改变程序的状态。p> 是否可以在用户每次触摸屏幕时在全局范围内刷新此计时器,这样我就不必调用程序中每个可触摸元素中的计时器“
start()
插槽”
即使用户触摸屏幕上没有按钮/交互元素的部分,我也希望刷新此计时器
类似于main.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中实现这一点。如果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将被调用。这解决了单击空白区域的问题,但是我仍然需要在所有活动元素上实现计时器重新启动。“我猜任何触摸都没有“全局”功能,你能做某个动作吗?@DomenKern嗯,我知道有一个叫做drag.filterChildren的标志,它可以覆盖后代鼠标区域。不幸的是,这只适用于拖动事件。如果您正在开发qt+qml应用程序,那么可以同时使用QTouchEvent和QMouseEvent,这样您就可以只使用一个事件来处理全局触摸事件。