Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在用户每次触摸屏幕时在Qml中执行操作?_C++_Qt_Touch_Qml_Embedded Linux - Fatal编程技术网

C++ 如何在用户每次触摸屏幕时在Qml中执行操作?

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

我正在使用Qt和Qml为嵌入式linux触摸屏设备编写应用程序。
我需要实现一个锁定屏幕,该屏幕在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,这样您就可以只使用一个事件来处理全局触摸事件。