diff --git a/InterpolationGenerator.js b/InterpolationGenerator.js new file mode 100644 index 0000000000000000000000000000000000000000..38d8af09095f0360cf95668148816c37b85c546a --- /dev/null +++ b/InterpolationGenerator.js @@ -0,0 +1,14 @@ +var stop=0 +var sleep = function(time) { + var startTime = new Date().getTime() + parseInt(time, 10); + while(new Date().getTime() < startTime) {} +}; +WorkerScript.onMessage = function(message) { + var count = message.duration/16;//16ms each data + var step = (message.newSpeed-message.oldSpeed)/count; + for(var i=1;i<=count;i++) + { + WorkerScript.sendMessage({ 'speed': message.oldSpeed+step*i ,'end':0}) + sleep(16); + } +} diff --git a/MyShapeGauge.qml b/MyShapeGauge.qml index 5f456d6990bdf24a04b5510a7f275c1ab8527f87..a29ecfdbd350b1b8878b8af7c4bf0df72220cbe0 100644 --- a/MyShapeGauge.qml +++ b/MyShapeGauge.qml @@ -4,6 +4,7 @@ import QtQuick.Shapes 1.0 Item { id:shapeItem property real engineSpeedAngle: 0 +// property real tmpEngineSpeedAngle: 0 Image { id: leftGauge x:19 @@ -20,6 +21,41 @@ Item { source:"qrc:/images/Tachometer_Scale.png" opacity:1 } +// property real lastSpeed: right_mark_Point.rotation +// onEngineSpeedAngleChanged: { +// rotator.from = lastSpeed; +// rotator.to = engineSpeedAngle; +// lastSpeed = engineSpeedAngle; +// rotator.running=true; + +// rotator2.from = lastSpeed; +// rotator2.to = engineSpeedAngle; +// lastSpeed = engineSpeedAngle; +// rotator2.running=true; + +// } +// SequentialAnimation{ +// running: true +// loops: Animation.Infinite +// RotationAnimator{ +// id:rotator +// target: right_mark_Point +// from: -90 +// to:90 +// duration: 2000 +// } +// RotationAnimator{ +// id:rotator2 +// target: right_mark_Point +// from: 90 +// to:-90 +// duration: 2000 +// } +// } + + + + // Shape{ // id:leftShape // anchors.fill: leftGauge @@ -31,9 +67,9 @@ Item { // fillColor: "transparent" // PathAngleArc{ // radiusX: 306 -// radiusY: 288 -// centerX: leftShape.width/2 -// centerY: leftShape.height/2+83 +// radiusY: 306 +// centerX: 318 +// centerY: 320 // startAngle: 150 // sweepAngle: engineSpeedAngle+120 // } @@ -45,6 +81,12 @@ Item { y:22 visible: true rotation: engineSpeedAngle +// Behavior on rotation { +// RotationAnimator{ +// duration: 100 +// } +// } + transformOrigin:Item.Bottom source:"qrc:/images/pointer_long.png" opacity:1 @@ -76,9 +118,9 @@ Item { // fillColor: "transparent" // PathAngleArc{ // radiusX: 306 -// radiusY: 288 -// centerX: rightShape.width/2 -// centerY: rightShape.height/2+83 +// radiusY: 306 +// centerX: 318 +// centerY: 320 // startAngle: 150 // sweepAngle: engineSpeedAngle+120 // } @@ -92,5 +134,10 @@ Item { rotation: engineSpeedAngle transformOrigin:Item.Bottom source:"qrc:/images/pointer_short.png" +// Behavior on rotation { +// RotationAnimation{ +// duration: 100 +// } +// } } } diff --git a/main.cpp b/main.cpp index fea655b57dd8d4cd3e11a26fa9bb3ed7dee3f8a3..1ace6dd34702618f029e6016ffda65f4841c095b 100644 --- a/main.cpp +++ b/main.cpp @@ -8,19 +8,21 @@ #include"datamodel.h" #include"mycircle.h" #include"myeventfilter.h" +QGuiApplication* g_app; void setSpeed(DataModel* model) { qDebug()<<"running thread"; bool forward=true; qreal speed=0; + qreal step=9; while (true) { if(forward) { - speed+=1; + speed+=step; } else { - speed-=1; + speed-=step; } model->setSpeed(speed); if(forward && speed>=90) @@ -31,7 +33,7 @@ void setSpeed(DataModel* model) { forward=true; } - QThread::msleep(16); + QThread::msleep(100); } } @@ -45,11 +47,16 @@ int main(int argc, char *argv[]) } DataModel model; - QtConcurrent::run(setSpeed,&model); + + QGuiApplication app(argc, argv); + g_app = &app; + + QtConcurrent::run(setSpeed,&model); + qmlRegisterType<MyCircle>("MyControl",1,0,"Circle"); - MyEventFilter eventFilter; - app.installEventFilter(&eventFilter); +// MyEventFilter eventFilter; +// app.installEventFilter(&eventFilter); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("Model",&model); @@ -61,6 +68,7 @@ int main(int argc, char *argv[]) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); + QQuickWindow* window =static_cast<QQuickWindow*>(engine.rootObjects().at(0)) ; QElapsedTimer *pTimer = new QElapsedTimer(); pTimer->start(); diff --git a/main.qml b/main.qml index eac892c463e6e45893b356b8a48f36243704e83e..0743a5aa7671e0b31c0dfb49680435655c9beba1 100644 --- a/main.qml +++ b/main.qml @@ -1,7 +1,7 @@ -import QtQuick 2.12 -import QtQuick.Window 2.12 +import QtQuick 2.11 +import QtQuick.Window 2.11 import MyControl 1.0 -import QtQuick.Shapes 1.15 +import QtQuick.Shapes 1.0 Window { width: 1920 height: 720 @@ -12,31 +12,48 @@ Window { color: "black" } + MyShapeGauge{ id:shapeGauge - engineSpeedAngle:Model.speed - } -// MySGGauge{ -// id:sgGauge -// } - - SequentialAnimation{ - running: false - loops: Animation.Infinite - PropertyAnimation{ - target: shapeGauge - property: "engineSpeedAngle" - from: -90 - to:90 - duration: 10000 - } - PropertyAnimation{ - target: shapeGauge - property: "engineSpeedAngle" - from: 90 - to:-90 - duration: 10000 + engineSpeedAngle: Model.speed + Behavior on engineSpeedAngle{ + NumberAnimation{ + duration: 150 + } } + + // property real duration: 0 + // property real tmpEngineSpeedAngle: Model.speed + // onTmpEngineSpeedAngleChanged:{ + + // duration = Math.abs(engineSpeedAngle-tmpEngineSpeedAngle)*4000/224; + // engineSpeedAngle = tmpEngineSpeedAngle; + // } + // Behavior on engineSpeedAngle { + // NumberAnimation{ + // duration: duration + // } + // } } + + +// SequentialAnimation{ +// running: true +// loops: Animation.Infinite +// PropertyAnimation{ +// target: shapeGauge +// property: "engineSpeedAngle" +// from: -90 +// to:90 +// duration: 3000 +// } +// PropertyAnimation{ +// target: shapeGauge +// property: "engineSpeedAngle" +// from: 90 +// to:-90 +// duration: 3000 +// } +// } } diff --git a/myeventfilter.cpp b/myeventfilter.cpp index ca898583e287d8e9ef52bb64372ed5f0483672a6..9bf821045b9b9135c1b8527dfb4ee118feffd814 100644 --- a/myeventfilter.cpp +++ b/myeventfilter.cpp @@ -7,9 +7,11 @@ MyEventFilter::MyEventFilter(QObject *parent) : QObject(parent) bool MyEventFilter::eventFilter(QObject *watched, QEvent *event) { // qDebug()<<"enter event filter"; - if(event->type() == QEvent::UpdateRequest) + if(event->type() == QEvent::StateMachineSignal) { - qDebug()<<"paint..."<<m_timer.restart()<<"ms"; +// qDebug()<<"paint..."<<m_timer.restart()<<"ms"; + return QObject::eventFilter(watched,event); } - QObject::eventFilter(watched,event); +// return QObject::eventFilter(watched,event); + return true; } diff --git a/qml.qrc b/qml.qrc index 55d10f62f3e9589307c7202be14d501c1461b234..eca0b096a3bd275f06fff797975ce234386bcbf2 100644 --- a/qml.qrc +++ b/qml.qrc @@ -59,5 +59,6 @@ <file>images/Turbocharged_Scale.png</file> <file>images/water_white.png</file> <file>MySGGauge.qml</file> + <file>InterpolationGenerator.js</file> </qresource> </RCC>