首页 文章

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

提问于
浏览
3

我正在使用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

    如果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 .

相关问题