QML實(shí)現(xiàn)鐘表效果
Qt5以后的版本,主要加大的對(duì)Qt Quick的改進(jìn)?,F(xiàn)實(shí)最新的版本可以利用Qt Quick實(shí)現(xiàn)很多的絢麗的效果。此里只是利用畫布Canvas簡(jiǎn)單鐘表的效果。效果如下:
源碼如下
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(); //畫圓實(shí)現(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(); } //定時(shí)器 Timer { interval: 1000; running: true; repeat: true onTriggered: canvas.requestPaint(); } }
利用定時(shí)器實(shí)現(xiàn)動(dòng)態(tài)效果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法示例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的定義與使用方法,結(jié)合實(shí)例形式分析了Python雙向鏈表的概念、原理、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-01-01Keras目標(biāo)檢測(cè)mtcnn?facenet搭建人臉識(shí)別平臺(tái)
這篇文章主要為大家介紹了Keras目標(biāo)檢測(cè)mtcnn?facenet搭建人臉識(shí)別平臺(tái),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05解決Matplotlib圖表不能在Pycharm中顯示的問題
今天小編就為大家分享一篇解決Matplotlib圖表不能在Pycharm中顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05用Python實(shí)現(xiàn)web端用戶登錄和注冊(cè)功能的教程
這篇文章主要介紹了用Python實(shí)現(xiàn)web端用戶登錄和注冊(cè)功能的教程,需要的朋友可以參考下2015-04-04Django實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能
這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)分頁(yè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02使用matplotlib的pyplot模塊繪圖的實(shí)現(xiàn)示例
這篇文章主要介紹了使用matplotlib的pyplot模塊繪圖的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07TensorFlow實(shí)現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了TensorFlow實(shí)現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02