Измерьте время для перемещения компонента в QML - PullRequest
0 голосов
/ 13 февраля 2019

В этом простом коде пользователь может перетаскивать ракетку вверх или вниз.Мы хотим знать время для движения ракетка (т. Е. Каждые y изменения ракетки, пойманные на YChanged ).Если пользователь перемещает его быстро, время для каждого изменения y меньше, чем время, которое он перемещает медленно, естественно.

Я пошел на это, но он всегда пишет «Время = 0»!Есть ли способ выполнить эту простую задачу, пожалуйста?

main.qml :

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    id: window
    visible: true
    width: 700; height: 500
    color: "gray"

    Rectangle {
        id: table
        width: window.width / 1.15; height: window.height / 1.15
        y: 10
        anchors.horizontalCenter: parent.horizontalCenter
        color: "royalblue"
    }

    Racket {
        id: racket
        x: table.width - 10
        y: table.height / 2
    }
}

Racket.qml :

import QtQuick 2.12

Rectangle {
    width: 15; height: 65

    property int oldY: y
    property bool yUwards: false
    property bool yDwards: false
    property double colTime

    onYChanged: {
         colTime = new Date().getTime()

        if (y > oldY)
            yDwards = true
        else if (y < oldY)
            yUwards = true
        oldY = y
        console.log("Time = ", colTime - new Date().getTime())
    }

    MouseArea {
        anchors.fill: parent
        anchors.margins: -parent.height
        drag.target: parent
        drag.axis: Drag.YAxis
        drag.minimumY: table.y
        drag.maximumY: table.height - parent.height + 10
    }
}

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы хотите измерить время изменения, вы должны выполнить ту же процедуру, что и для Y, сохранить последний раз в памяти:

import QtQuick 2.12

Rectangle {
    width: 15; height: 65

    property bool yUwards: false
    property bool yDwards: false
    property real oldY: y
    property double last_time: new Date().getTime()

    onYChanged: {
        var current_time = new Date().getTime()
        console.log("Time = ", current_time - last_time)
        if (y > oldY)
            yDwards = true
        else if (y < oldY)
            yUwards = true
        oldY = y
        last_time = current_time
    }

    MouseArea {
        anchors.fill: parent
        anchors.margins: -parent.height
        drag.target: parent
        drag.axis: Drag.YAxis
        drag.minimumY: table.y
        drag.maximumY: table.height - parent.height + 10
    }
}
...