explorer

万丈高楼平地起,勿在浮沙筑高台

0%

学习书籍:

  1. 《QmlBook》

Qt 版本:Qt 5.12.10

Qt Quick 也提供了最为基本的绘制工具,Canvas元素提供了最基本的画布,用户就在这个画布上画点线面即可,比如下面就填充了一个方形:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import QtQuick 2.5

Canvas {
id: root
// canvas size
width: 200; height: 200
// 绘图操作要在 onPaint 事件处理中完成
onPaint: {
// 2d contex 提供绘图控制
var ctx = getContext("2d")
// 设置线宽及颜色
ctx.lineWidth = 4
ctx.strokeStyle = "blue"
// 设置填充的颜色
ctx.fillStyle = "red"
// 开始绘制
ctx.beginPath()
// 设置起始点
ctx.moveTo(50,50)
// upper line
ctx.lineTo(150,50)
// right line
ctx.lineTo(150,150)
// bottom line
ctx.lineTo(50,150)
// 结束绘制
ctx.closePath()
// 使能填充效果
ctx.fill()
// 使能外框的绘制效果
ctx.stroke()
}
}
阅读全文 »

传统指针具有以下缺陷:

  1. 单从一个指针的声明,无法判定它是指向一个对象还是指向一个包含该对象的数组
  2. 单从一个指针的声明,无法判定当不使用该指针时,是否需要释放它所指向对象所占用的资源
  3. 当需要释放指针所指向对象的资源时,并不能明确的知道是该使用delete,还是使用其它专有的释放函数
  4. 当需要使用delete释放资源时,到底是使用delete还是delete[],这需要小心使用
  5. 当确定了释放机制时,也有可能写代码时一不小心,就造成了 double free
  6. 当释放一个资源时,有可能还有其它指针指向该资源,从而导致很多很难查的 BUG

使用智能指针变能够最大化的避免以上问题。

阅读全文 »

shared_ptr使用对资源的引用计数来决定是否释放资源:

  • 构造函数会使得对资源的引用计数加 1
  • 而析构函数和赋值构造函数都会将对当前指向资源的引用计数减 1
  • 当对资源的引用计数为 0 时,就会释放该资源
    阅读全文 »