Qt &引用;现在几点了;通过拖动指针
我正在尝试实现一个用Qt编写的小型教学程序,在并行学习时使用QML 我想知道在时钟指针的循环拖动过程中是否有可能获得实时数据。您是否建议从Qt的“定制拨号”开始 它将只是一个带有小时指针的时钟(间隔为1小时)Qt &引用;现在几点了;通过拖动指针,qt,qml,drag,snapping,mousearea,Qt,Qml,Drag,Snapping,Mousearea,我正在尝试实现一个用Qt编写的小型教学程序,在并行学习时使用QML 我想知道在时钟指针的循环拖动过程中是否有可能获得实时数据。您是否建议从Qt的“定制拨号”开始 它将只是一个带有小时指针的时钟(间隔为1小时) 我试图自定义下面的代码,以便将处理程序移出圆圈,如果可能的话,将其替换为具有三角形形状的svg图像。将间隔时间改为1h而不是秒也是一项挑战。到目前为止还没有工作…:) 导入QtQuick 2.0 长方形{ id:根; 宽度:720; 身高:480; 颜色:“黑色”; 项目{ id:集装箱;
我试图自定义下面的代码,以便将处理程序移出圆圈,如果可能的话,将其替换为具有三角形形状的svg图像。将间隔时间改为1h而不是秒也是一项挑战。到目前为止还没有工作…:)
导入QtQuick 2.0
长方形{
id:根;
宽度:720;
身高:480;
颜色:“黑色”;
项目{
id:集装箱;
宽度:250;
高度:宽度;
archors.centerIn:父对象;
不动产中心:(宽度/2);
不动产中心:(高度/2);
长方形{
id:rect;
颜色:“白色”;
transformOrigin:Item.Center;
半径:(宽度/2);
抗锯齿:真;
锚固件。填充:父级;
长方形{
id:手柄;
颜色:“红色”;
宽度:50;
高度:宽度;
半径:(宽度/2);
抗锯齿:真;
锚定{
top:parent.top;
利润率:10;
horizontalCenter:parent.horizontalCenter;
}
鼠耳{
锚固件。填充:父级;
已更改的位置:{
var point=mapToItem(容器,mouse.x,mouse.y);
var diffX=(point.x-container.centerX);
var diffY=-1*(point.y-container.centerY);
var rad=Math.atan(diffY/diffX);
var deg=(rad*180/数学PI);
if(diffX>0&&diffY>0){
直线旋转=90-数学绝对值(度);
}
else if(diffX>0&&diffY<0){
直线旋转=90+数学绝对值(度);
}
else if(diffX<0&&diffY>0){
直线旋转=270+数学绝对值(度);
}
else if(diffX<0&&diffY<0){
直线旋转=270-数学绝对值(度);
}
}
}
}
}
正文{
文本:“%1秒”.arg(Math.round(rect.rotation/6));
字体{
像素大小:20;
粗体:正确;
}
archors.centerIn:父对象;
}
}
}
我不建议定制刻度盘,因为它的固定角度范围限制为-140到140。你需要360度的旋转,不会在任何地方开始或停止。因此,您需要一个完全自定义的实现。任务可以作为自定义项轻松实现。根据我的经验,这将花费更少的时间,工作更快更稳定。定制一些现成的项目将不会如此灵活。特别是如果所有这些都是为了培训目的。非常感谢您的回复。对我需要指针捕捉到每个小时间隔。这正是我想做的。
import QtQuick 2.0
Rectangle{
id: root;
width: 720;
height: 480;
color: "black";
Item {
id: container;
width: 250;
height: width;
anchors.centerIn: parent;
property real centerX : (width / 2);
property real centerY : (height / 2);
Rectangle{
id: rect;
color: "white";
transformOrigin: Item.Center;
radius: (width / 2);
antialiasing: true;
anchors.fill: parent;
Rectangle {
id: handle;
color: "red";
width: 50;
height: width;
radius: (width / 2);
antialiasing: true;
anchors {
top: parent.top;
margins: 10;
horizontalCenter: parent.horizontalCenter;
}
MouseArea{
anchors.fill: parent;
onPositionChanged: {
var point = mapToItem (container, mouse.x, mouse.y);
var diffX = (point.x - container.centerX);
var diffY = -1 * (point.y - container.centerY);
var rad = Math.atan (diffY / diffX);
var deg = (rad * 180 / Math.PI);
if (diffX > 0 && diffY > 0) {
rect.rotation = 90 - Math.abs (deg);
}
else if (diffX > 0 && diffY < 0) {
rect.rotation = 90 + Math.abs (deg);
}
else if (diffX < 0 && diffY > 0) {
rect.rotation = 270 + Math.abs (deg);
}
else if (diffX < 0 && diffY < 0) {
rect.rotation = 270 - Math.abs (deg);
}
}
}
}
}
Text {
text: "%1 secs".arg (Math.round (rect.rotation / 6));
font {
pixelSize: 20;
bold: true;
}
anchors.centerIn: parent;
}
}
}