qml基礎學習 Canvas畫筆


一、畫布元素

    自qt4.7發布qml以來,qml也在一直不斷的完善中,在qt4時代使用qml時如果需要異形圖,那我們只能讓設計師來切圖,這樣的感覺是很不爽的,總感覺開發沒有那么犀利。但是到了qt5這一點有所改變,qt引入了canvas畫圖,我們可以在程序中自定義一個畫布來繪制自己想要的圖形,然后達到我們自己想要的效果。

二、效果預覽

圖1 canvas畫布

三、源碼分析

   代碼量都是算法,這個我就不解釋了(主要是看不懂),控件中就包含了一個Canvas畫布,然后在畫布的onPaint函數中繪制圖形

 1 import QtQuick 2.2
 2 
 3 Rectangle{
 4     width: 300;
 5     height: 300;
 6 
 7     //自定義畫布
 8     Canvas {
 9         id: root;
10         anchors.fill: parent;
11 
12         //再次函數中繪制圖形
13         onPaint: {
14             var ctx = getContext("2d");
15             draw(ctx);
16         }
17 
18         function draw (ctx) {
19             ctx.fillRect(0, 0, 300, 300);
20             for (var i = 0; i < 3; i++) {
21                 for (var j = 0; j < 3; j++) {
22                     ctx.save();
23                     ctx.strokeStyle = "#9CFF00";
24                     ctx.translate(50 + j * 100, 50 + i * 100);
25                     drawSpirograph(ctx, 20 * (j + 2) / (j + 1), -8 * (i + 3) / (i + 1), 10);
26                     ctx.restore();
27                 }
28             }
29         }
30 
31         function drawSpirograph (ctx, R, r, O) {
32             var x1 = R - O;
33             var y1 = 0;
34             var i  = 1;
35             ctx.beginPath();
36             ctx.moveTo(x1, y1);
37             do {
38                 if (i > 20000) break;
39                 var x2 = (R + r) * Math.cos(i * Math.PI / 72) - (r + O) * Math.cos(((R + r) / r) * (i * Math.PI / 72))
40                 var y2 = (R + r) * Math.sin(i * Math.PI / 72) - (r + O) * Math.sin(((R + r) / r) * (i * Math.PI / 72))
41                 ctx.lineTo(x2, y2);
42                 x1 = x2;
43                 y1 = y2;
44                 i++;
45             } while (x2 != R-O && y2 != 0 );
46             ctx.stroke();
47         }
48     }
49 }

四、相關文章

  qml基礎學習 基礎概念

  qml基礎學習 模型視圖(一)

 

如果您覺得文章不錯,不妨給個 打賞,寫作不易,感謝各位的支持。您的支持是我最大的動力,謝謝!!! 

 

  


很重要--轉載聲明

  1. 本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
  2. 如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM