2014-03-31 2 views
7

타이머 QML 앱을 만들었으며 Timer qml 구성 요소를 사용하고 있습니다. 간격은 1000 밀리 초 (기본값)로 설정되어 있지만 앱이 포커스가있는 경우에만 제대로 작동하는 것 같습니다. 배경에 넣을 때마다 매번 트리거되지 않는 것 같습니다. 그 때문에 앱에서 실수가 발생했습니다.Qml 타이머가 올바른 간격으로 트리거되지 않았습니다.

나는 문서에 그와 관련된 아무것도 찾을려고 노력했지만, 나는 할 수 없습니다 타이머 코드는 정말 간단하다 :

Timer { 
    id: timer 
    repeat: true 
    onTriggered: {msRemaining -= 1000; Core.secondsToText(type);} 
} 

사람은 어떻게 문제를 해결하는 방법에 대해 어떤 생각을 가지고?

버전 : Qt는 5.2 QML 2.0 OS X 10.9

답변

8

QML 타이머 요소는 애니메이션 타이머에 동기화된다. 애니메이션 타이머는 일반적으로 60fps로 설정되므로 Timer의 해상도는 최고 16ms입니다. 또한 Qt Quick 2에서는 애니메이션 타이머가 화면 새로 고침과 동기화됩니다 (Qt Quick 1에서는 16ms로 하드 코딩 됨). 그래서 귀하의 응용 프로그램이 백그라운드에서 실행될 때 나는 상쾌하게 멈추고 결과적으로 화면 새로 고침과 동기화되는 타이머가 제대로 작동하지 않을 것이라고 생각합니다.

타이머를 사용하여 경과 시간을 표시하려면 정확하지 않기 때문에 좋지 않습니다. 안드로이드에서 실행, 내가 Timer 객체와 QML 응용 프로그램이

import QtQuick 2.0 

Item { 
    id: root 
    width: 200; height: 230 

    property double startTime: 0 
    property int secondsElapsed: 0 

    function restartCounter() { 

      root.startTime = 0; 

     } 

    function timeChanged() { 
     if(root.startTime==0) 
     { 
      root.startTime = new Date().getTime(); //returns the number of milliseconds since the epoch (1970-01-01T00:00:00Z); 
     } 
     var currentTime = new Date().getTime(); 
     root.secondsElapsed = (currentTime-startTime)/1000; 
    } 

    Timer { 
     id: elapsedTimer 
     interval: 1000; 
     running: true; 
     repeat: true; 
     onTriggered: root.timeChanged() 
    } 

    Text { 
     id: counterText 
     text: root.secondsElapsed 
    } 
} 
+0

답변 해 주셔서 감사합니다. Qt Quick 2에서 경과 시간을 보여주는 가장 좋은 방법은 무엇입니까? – danielfranca

+0

나는 경과 시간을 보여주는 예를 보여주는 해답을 편집했다. – Nejat

+0

화면이 꺼져있을 때 5 분 후에 트리거 된 이벤트를 가져올 수 있습니까? –

1

: 당신은 같은 자바 스크립트 날짜() 함수를 사용할 수 Qt는 4.8로

  • 는, 타이머가 잘 작동 할 때 QML 응용 프로그램 백그라운드에서입니다.

  • Qt 5.4에서는 QML 앱이 배경에있을 때 더 이상 타이머가 작동하지 않습니다. 예를 들어, QML 앱은 더 이상 onTriggered() 신호를 수신 할 수 없습니다. QML 앱이 포 그라운드로 다시 가져 오면 타이머가 다시 작동하기 시작합니다. QML 앱이 백그라운드에있는 동안 Qt 신호가 차단 된 것처럼 보입니다.

이렇게 Qt가 회귀 한 것처럼 보입니다. 가장 좋은 해결책은이 회귀가 고정 될 때까지 기다리는 것입니다.

+0

이 회귀는 Qt 5.5 알파 릴리스에서 수정 된 것으로 보입니다. 따라서이 수정은 Qt 5.5 공식 릴리스에서 가능할 것입니다. – jonathanzh