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

时间:2014-05-22 10:35:38

标签: c++ qt touch qml embedded-linux

我正在使用Qt和Qml编写嵌入式linux触摸屏设备的应用程序 我需要实现一个在30秒不活动后出现的锁定屏幕 为此,我在C ++中实现了一个计时器,它在超时后改变了程序的状态。

每次用户触摸屏幕时,是否可以在全局范围内刷新此计时器,这样我就不必在程序中的每个可触摸元素中调用计时器'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中实现这一点。

1 个答案:

答案 0 :(得分:0)

如果mainRect是您的根组件,您只需在其MouseArea中启动计时器。

 // 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
     }
 }

这不会覆盖后代MouseAreas。因此,如果触摸没有按钮/交互元素的区域,将调用startLockTimer。