2018年3月22日

Timer

モジュール

QtQml 2.0

クラス継承

QQmlTimer → QObject

プロパティー

interval: int = 1000
repeat: bool = false
running: bool = false
triggeredOnStart: bool = false

シグナル

void triggered() 
void runningChanged()
void intervalChanged()
void repeatChanged()
void triggeredOnStartChanged()

スロット

void restart()
void start()
void stop()

説明


interval に指定した間隔で triggered() シグナルを送信する。

QTimer とは違ってアニメーションのタイマーと同期している。従ってアニメーションが 60fps ならば Timer の精度は 16 ミリ秒になる。タイマー精度は以下のようにして確認できる。
coretimer.qml:

import QtQml 2.0

QtObject {
    id: root

    property int count: 0
    property int maxCount: 10
    readonly property var timer: Qt.createQmlObject('import QtQml 2.0; Timer { interval: 16; running: false; repeat: true; }', root)

    function fire() {
        count = count + 1;
        if (count >= maxCount) {
            console.timeEnd("time");
            timer.stop();
            Qt.quit();
        }
    }

    Component.onCompleted: {
        timer.triggered.connect(fire);
        if (Qt.application.arguments.length >= 4) {
            timer.interval = Qt.application.arguments[3];
        }
        if (Qt.application.arguments.length >= 5) {
            maxCount = Qt.application.arguments[4];
        }
        console.time("time");
        timer.running = true;
    }
}
実行結果はこのようになる。
$ qml coretimer.qml -- 1 100
time: 141ms
$ qml coretimer.qml -- 2 100
time: 217ms
$ qml coretimer.qml -- 3 100
time: 328ms
$ qml coretimer.qml -- 4 100
time: 425ms
$ qml coretimer.qml -- 5 100
time: 527ms
$ qml coretimer.qml -- 6 100
time: 624ms
$ qml coretimer.qml -- 7 100
time: 717ms
$ qml coretimer.qml -- 8 100
time: 826ms
$ qml coretimer.qml -- 9 100
time: 915ms
$ qml coretimer.qml -- 10 100
time: 1016ms
$

プロパティーが変更されると一旦停止し最初から動作を開始する。

プロパティーの説明

interval: int

triggered() シグナルの送信間隔をミリ秒で指定する。

repeat: bool

true に設定すると interval に指定した間隔で triggered() シグナルを繰り返し送信する。false に設定すると interval に指定した間隔後に triggered() シグナルを一度だけ送信する。

running: bool

動作中は true で停止中は false、逆に値を設定して動作と停止を切り替えられる。

triggeredOnStart: bool

true に設定すると動作開始時に triggered() シグナルを呼び出す。repeat が false の場合には開始時と interval で指定した間隔後の計 2 回 triggered() シグナルが送信される。

スロットの説明

void restart()

動作を再開し running が true になる。停止中ならば動作を再開し、動作中ならば一旦停止し最初から動作を開始する。

void start()

動作を開始し running が true になる。動作中ならばそのまま動作を続ける。

void stop()

動作を停止し running が false になる。停止中ならばそのままで何もしない。

参考情報