QML實現(xiàn)鐘表效果
Qt5以后的版本,主要加大的對Qt Quick的改進?,F(xiàn)實最新的版本可以利用Qt Quick實現(xiàn)很多的絢麗的效果。此里只是利用畫布Canvas簡單鐘表的效果。效果如下:

源碼如下
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 740
height: 680
title: qsTr("Hello World")
id:window
//color: "red";
Canvas
{
id : canvas
anchors.fill: parent
width: 740
height: 680
onPaint:
{
var ctx = getContext("2d");
drawBack(ctx);
drawDot(ctx);
var date = new Date();
var hours = date.getHours()
hours = hours%12;
var minutes = date.getMinutes()
var seconds = date.getUTCSeconds();
var timestr =date.toLocaleString("yyyy-MM-dd hh:mm:ss");
console.log(date.toLocaleString("yyyy-MM-dd hh:mm:ss"));
drawSecond(seconds,ctx);
drawHour(hours,minutes,ctx);
drawMinute(minutes,seconds,ctx);
drawSecond(seconds,ctx);
}
}
function drawBack(ctx)
{
var r = 200;
ctx.save();
ctx.beginPath();
ctx.translate(width/2,height/2);
ctx.clearRect(-r,-r,r*2,r*2);
ctx.lineWidth = 10;
ctx.arc(0,0,r-5,0,Math.PI*2,false); //外圓
ctx.stroke();
//畫文本
var numbers = [1,2,3,4,5,6,7,8,9,10,11,12];
ctx.font = "18px Arial";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
for(var i = 0; i < 12; ++i)
{
var rad = 2*Math.PI/12*numbers[i]-3.14/2;
var x = Math.cos(rad)*(r-30);
var y = Math.sin(rad)*(r-30);
ctx.fillText(numbers[i],x,y);
}
//畫刻度
ctx.lineWidth = 2;
for (var i = 0; i <60; ++i)
{
ctx.beginPath();
var rad = 2*Math.PI/60*i;
var x = Math.cos(rad)*(r-15);
var y = Math.sin(rad)*(r-15);
var x2 = Math.cos(rad)*(r-10);
var y2 = Math.sin(rad)*(r-10);
//通過畫線也可以
if (i%5 === 0)
{ctx.strokeStyle="#000000";}
else
{ ctx.strokeStyle = "#989898";}
ctx.moveTo(x,y);
ctx.lineTo(x2,y2);
ctx.stroke();
//畫圓實現(xiàn)
// if (i%5 === 0)
// {ctx.fillStyle="#000000";}
// else
// { ctx.fillStyle = "#FFFFFF";}
// ctx.arc(x,y,2,0,3.15*2,false);
// ctx.fill();
}
ctx.restore();
}
function drawHour(hour, minute, ctx)
{
var r = 200;
ctx.save();
ctx.beginPath(); //必須寫
ctx.lineWidth = 7;
ctx.lineCap = "round";
ctx.translate(width/2,height/2);
var rad = Math.PI*2/12*hour+Math.PI*2*minute/12/60-Math.PI;
ctx.rotate(rad);
ctx.moveTo(0,-10);
ctx.lineTo(0,r/2-10);
ctx.stroke(); //必須寫(填充方式)
ctx.restore();
}
function drawMinute(minute,second,ctx)
{
var r = 200;
ctx.save();
ctx.beginPath(); //必須寫
ctx.lineWidth = 5;
ctx.lineCap = "round";
ctx.translate(width/2,height/2);
var rad = Math.PI*2*minute/60 + Math.PI*2*second/60/60 -Math.PI;
ctx.rotate(rad);
ctx.moveTo(0,-10);
ctx.lineTo(-10,r*3/5-10);
ctx.stroke(); //必須寫(填充方式)
ctx.restore();
}
function drawSecond(second,ctx)
{
var r = 200;
ctx.save();
ctx.beginPath(); //必須寫
ctx.lineWidth = 3;
ctx.lineCap = "round";
ctx.translate(width/2,height/2);
ctx.strokeStyle="#ff0000";
var rad = Math.PI*2*second/60-Math.PI;
ctx.rotate(rad);
ctx.moveTo(0,-20);
ctx.lineTo(0,r*4/5-10);
ctx.stroke(); //必須寫(填充方式)
ctx.restore();
}
function drawDot(ctx)
{
ctx.save();
ctx.beginPath(); //必須寫
ctx.translate(width/2,height/2);
ctx.fillStyle="#ffffff";
ctx.arc(0,0,3,0,Math.PI*2);
ctx.fill(); //必須寫(填充方式)
ctx.restore();
}
//定時器
Timer {
interval: 1000; running: true; repeat: true
onTriggered: canvas.requestPaint();
}
}
利用定時器實現(xiàn)動態(tài)效果。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法示例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法,結(jié)合實例形式分析了Python雙向鏈表的概念、原理、使用方法及相關注意事項,需要的朋友可以參考下2018-01-01
Keras目標檢測mtcnn?facenet搭建人臉識別平臺
這篇文章主要為大家介紹了Keras目標檢測mtcnn?facenet搭建人臉識別平臺,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
解決Matplotlib圖表不能在Pycharm中顯示的問題
今天小編就為大家分享一篇解決Matplotlib圖表不能在Pycharm中顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
用Python實現(xiàn)web端用戶登錄和注冊功能的教程
這篇文章主要介紹了用Python實現(xiàn)web端用戶登錄和注冊功能的教程,需要的朋友可以參考下2015-04-04
使用matplotlib的pyplot模塊繪圖的實現(xiàn)示例
這篇文章主要介紹了使用matplotlib的pyplot模塊繪圖的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡
這篇文章主要介紹了TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

