QML中屏幕保护程序的计时器方法

问题描述 投票:-3回答:1

我正在尝试使用timer来激活屏幕保护程序。

在闲置10秒钟后,我的屏幕保护程序可以按预期显示,但是由于某种原因,在另外20个屏幕保护程序中它会重置并再次变得不可见。

这似乎是无限期发生的,我只希望屏幕保护程序重置,并且在单击MouseArea后不再可见,我的代码如下所示:

Timer {
    id: screenSaverTimer
    interval: 3000
    running: true
    repeat: true
    onTriggered: screenSaver.visible = true
}

onVisibleChanged: {
  if(visible) {
    screenSaver.visible = false
    screenSaverTimer.restart()
  }
}

ImageScreenSaver {
  id: screensaver
  z:99
  Image {
    source: "assets/screensaver.png"      

  MouseArea {
    anchors.fill:parent
    onClicked: {
      screenSaver.visible = false; screenSaverTimer.restart()
      }
   }
}

我的问题是

如何确保我的screensaver.visible仅在单击鼠标区域时才设为false-不受计时器的影响

qt qml screensaver
1个回答
0
投票

定时器的onTriggered信号发射每一次定时器完成,并且在您的情况下,每次将可见性设置为true-表示您的onVisibleChanged正在按照if(visible)进行选择]将screenSaver设置为false

我建议像这样扩展该调用以检查其当前可见性

Timer {
    id: screenSaverTimer
    interval: 10000
    running: true
    repeat: true
    onTriggered: myFunc()
}

function myFunc() {
    if(screenSaver.visible === false) {
        screenSaver.visible = true
        screenSaverTimer.restart()
    } else {
        screenSaverTimer.restart()
        //Can be left blank to ensure nothing happens if screenSaver.visible !== false
    }
}

ImageScreenSaver {
  id: screensaver
  z:99
  Image {
    source: "assets/screensaver.png"      

  MouseArea {
    anchors.fill:parent
    onClicked: {
      screenSaver.visible = false; screenSaverTimer.restart()
      }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.