0%

Gradient属性说明

相关控件:GradientStop

Gradient即梯度,也就是我们常说的逐变色。由两种或多种颜色定义混合形成,颜色可以从位置0.0到1.0逐渐变化,它们将无缝混合。没有任何渐变停止的gradient呈现为实心白色填充。

本文: https://www.lovejia.win/blog/article/Gradient.html
参考原文:http://doc.qt.io/qt-5/qml-qtquick-gradient.html
参考译文:http://blog.csdn.net/foruok/article/details/43225263

效果分类

LinearGradient,线性渐变

ConicalGradient,锥形渐变

RadialGradient,径向渐变

属性说明

1、LinearGradient中的属性

cached:bool

指示是否缓存。

start:point

指定渐变开始的位置,与 end 配合,可以使用 Qt.point() 方法为其赋值,或者使用 “x,y” 这种字符串形式为其赋值,如 “0, 180” ,等价于 Qt.point(0, 180)。

end:point

指定渐变结束的位置,与 start 配合。

gradient:Gradient

指定渐变色。Gradient 类用来定义一个渐变色,它只有一个属性 stops:list,列表内的对象类型为 GradientStop 。GradientStop 假设渐变的路径从0.0开始到1.0结束,它有两个属性,一个是 position ,指定渐变路径上的某个点,另一个属性 color 指定这个点上的颜色。一个 Gradient 可以包含多个 GradientStop 。

source

这个属性指定渐变元素要应用的来源元素,比如你要用渐变改变一张图片,就指定 source 为图片对象(Image)的 id 即可。如果你不指定,那渐变元素就自个用渐变色绘制一个图元。

2、ConicalGradient中的属性

angle:real

指定渐变的起始角度,注意是度:45°,180°之类的,不是弧度。 Gradient 属性里的渐变起始点 0.0 处的颜色与这个角度对应。应用渐变时按照顺时针方向,随着角度变大,Gradient里的颜色也向着 1.0 这个位置变化。

cached:bool

指示是否缓存。

horizontalOffset:real

偏离中心点的水平偏移量。。

verticalOffset:real

偏离中心点的垂直偏移量。。

gradient:Gradient

参见LinearGradient的gradient属性。。

source

参见LinearGradient的source属性。

3、RadialGradient中的属性

angle:real

指定渐变相对于中心点的旋转角度。
注意:这个和 ConicalGradient 的 angle 属性的含义不同。

cached:bool

指示是否缓存

horizontalOffset:real

与 ConicalGradient 的同名属性含义类似。

verticalOffset:real

与 ConicalGradient 的同名属性含义类似。

horizontalRadius:real

指定水平方向的半径。

verticalRadius:real

指定垂直方向的半径,与 horizontalRadius 结合,就定义了一个椭圆了。

gradient:Gradient

参见LinearGradient的gradient属性

source

参见LinearGradient的source属性

功能简述

Gradient元素与其他图形效果元素不同之处在于:渐变元素既可以用来改变一个已有的元素(如Image),也有可以独立使用。Gradient与使用纯色填充或图像相比,计算梯度可能在计算上是昂贵的。考虑在用户界面中为静态项目使用渐变。

以下示例宣布其渐变以红色开始,在矩形高度的三分之一处混合为黄色,并以绿色结尾:

1
2
3
4
5
6
7
8
9
import QtQuick 2.2  
Rectangle {
width: 100; height: 100
gradient: Gradient {
GradientStop { position: 0.0; color: "red" }
GradientStop { position: 0.33; color: "yellow" }
GradientStop { position: 1.0; color: "green" }
}
}

注意:这个组件本身不是可视化的,要显示渐变,使用Rectangle这样支持渐变的可视化组件。

渐变效果较为简单,所有的示例都放在一个 qml 文档: GradientExample.qml ——中,如:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
import QtQuick 2.2  
import QtGraphicalEffects 1.0
import QtQuick.Controls 1.2

Rectangle {
id: example;
anchors.fill: parent;
signal back();

Button {
anchors.right: parent.right;
anchors.top: parent.top;
anchors.margins: 4;
text: "Back";
onClicked: example.back();
}

Text {
id: linearLabel;
anchors.left: parent.left;
anchors.top: parent.top;
anchors.margins: 4;
text: "LinearGradient";
font.bold: true;
}

Row {
id: linears;
anchors.left: parent.left;
anchors.top: linearLabel.bottom;
anchors.margins: 4;
spacing: 8;

LinearGradient {
width: 100;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#80222222";}
GradientStop{ position: 0.9; color: "#FFFFFFFF";}
}
start: Qt.point(0, 0);
end: Qt.point(0, 180);
}

LinearGradient {
width: 100;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#FFFF0000";}
GradientStop{ position: 0.3; color: "#FFFFA000";}
GradientStop{ position: 0.5; color: "#A0FF4000";}
GradientStop{ position: 1.0; color: "#FF800FFF";}
}
start: Qt.point(0, 0);
end: Qt.point(80, 180);
}

Image {
id: butterfly;
source: "butterfly.png";
width: 180;
height: 180;
smooth: true;
sourceSize: Qt.size(180, 180);
}

LinearGradient {
source: butterfly;
width: 180;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#222222";}
GradientStop{ position: 0.9; color: "#F8884F";}
}
start: Qt.point(0, 0);
end: Qt.point(180, 180);
}
}


Text {
id: conicalLabel;
anchors.left: parent.left;
anchors.top: linears.bottom;
anchors.margins: 4;
text: "ConicalGradient";
font.bold: true;
}

Row {
id: conicals;
anchors.left: parent.left;
anchors.top: conicalLabel.bottom;
anchors.margins: 4;
spacing: 8;

ConicalGradient {
width: 100;
height: 180;
angle: 45;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#80222222";}
GradientStop{ position: 0.9; color: "#FFFFFFFF";}
}
}

ConicalGradient {
width: 100;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#FFFF0000";}
GradientStop{ position: 0.3; color: "#FFFFA000";}
GradientStop{ position: 0.5; color: "#A0FF4000";}
GradientStop{ position: 1.0; color: "#FF800FFF";}
}
horizontalOffset: 20;
verticalOffset: 40;
}

Image {
id: conicalOrig;
source: "butterfly.png";
width: 180;
height: 180;
smooth: true;
sourceSize: Qt.size(180, 180);
}

ConicalGradient {
source: conicalOrig;
width: 180;
height: 180;
angle: 60;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#A22222";}
GradientStop{ position: 0.9; color: "#2888F4";}
}
}
}


Text {
id: radialLabel;
anchors.left: parent.left;
anchors.top: conicals.bottom;
anchors.margins: 4;
text: "RadialGradient";
font.bold: true;
}

Row {
id: radials;
anchors.left: parent.left;
anchors.top: radialLabel.bottom;
anchors.margins: 4;
spacing: 8;

RadialGradient {
width: 100;
height: 180;
angle: 60;
horizontalRadius: 50;
verticalRadius: 90;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#222222";}
GradientStop{ position: 0.9; color: "#00FF0F";}
}
}

RadialGradient {
width: 100;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#FFFF0000";}
GradientStop{ position: 0.3; color: "#FFFFA000";}
GradientStop{ position: 0.5; color: "#A0FF4000";}
GradientStop{ position: 1.0; color: "#FF800FFF";}
}
horizontalOffset: 20;
horizontalRadius: 40;
verticalRadius: 40;
verticalOffset: 40;
}

Image {
id: radialOrig;
source: "butterfly.png";
width: 180;
height: 180;
smooth: true;
sourceSize: Qt.size(180, 180);
}

RadialGradient {
source: radialOrig;
width: 180;
height: 180;
angle: 120;
horizontalRadius: 40;
verticalRadius: 80;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#A22222";}
GradientStop{ position: 1.0; color: "#2888F4";}
}
}
}
}

下面的代码则是为 source 属性指定了一个 Image 对象,使用 Image 来显示一个图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Image {  
id: butterfly;
source: "butterfly.png";
width: 180;
height: 180;
smooth: true;
sourceSize: Qt.size(180, 180);
}

LinearGradient {
source: butterfly;
width: 180;
height: 180;
gradient: Gradient {
GradientStop{ position: 0.0; color: "#222222";}
GradientStop{ position: 0.9; color: "#F8884F";}
}
start: Qt.point(0, 0);
end: Qt.point(180, 180);
}

注意:使用 LinearGradient 来生成一个叠加了渐变效果的新元素,当我们为 LinearGradient 指定了 source 属性时,Qt Quick会在 source 指定的元素上应用渐变效果,生成一个新的元素,而原对象不会被改变。

------本文结束    感谢阅读------
你打赏你的,我分享我的!