Qt 如何动态更新矩形';s梯度?
我有这个:Qt 如何动态更新矩形';s梯度?,qt,qml,Qt,Qml,我有这个: Rectangle{ id:testrect property color gradcolor:"#8C8F8C" gradient: Gradient { GradientStop { position: 0.0; color: gradcolor } GradientStop { position: 0.17; color: "#6A6D6A" } GradientStop { po
Rectangle{
id:testrect
property color gradcolor:"#8C8F8C"
gradient:
Gradient {
GradientStop { position: 0.0; color: gradcolor }
GradientStop { position: 0.17; color: "#6A6D6A" }
GradientStop { position: 0.77; color: gradcolor }
GradientStop { position: 1.0; color: "#6A6D6A" }
}
在child MouseArea中,我想这样做:
onEntered: {
testrect.gradcolor="white"
parent.border.color = Qt.lighter("#6A6D6A")
边框颜色会根据需要更改,但渐变颜色不会更改。是因为渐变不是实时从gradcolor属性提取的吗?解决这个问题的最佳方法是什么?问题似乎是,如果您没有指出哪个元素包含属性,那么您的
渐变元素就没有链接到渐变颜色。这对我很有用:
Rectangle{
id:testrect
width: 200
height: 200
property color gradcolor: "green"
gradient: Gradient {
GradientStop { position: 0.0; color: testrect.gradcolor }
GradientStop { position: 0.17; color: "#6A6D6A" }
GradientStop { position: 0.77; color: testrect.gradcolor }
GradientStop { position: 1.0; color: "#6A6D6A" }
}
MouseArea {
anchors.fill:parent
hoverEnabled: true // Mandatory for hover events to work
onEntered: {
testrect.gradcolor = "red";
}
onExited: {
testrect.gradcolor = "blue";
}
}
}
有关QML范围的更多信息,请参见我在寻找在QML中使用画布和渐变时找到了这个答案
import QtQuick 2.0
Canvas {
id:canvas
property var ctx
onPaint:{
ctx = canvas.getContext('2d');
ctx.strokeStyle = Qt.rgba(0, 1, 1, 1);
ctx.lineWidth = 1;
ctx.beginPath();
var radgrad = ctx.createRadialGradient(75,50,5,90,60,100);
radgrad.addColorStop(0, '#A7D3FC');
radgrad.addColorStop(0.5, '#019F62');
radgrad.addColorStop(0.9, 'rgba(1,159,98,0)');
ctx.arc(100,75,50,0,2*Math.PI);
ctx.fillStyle = radgrad;
ctx.fill(0,10,10,10);
ctx.stroke();
}
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
var p = ctx.getImageData(mouseX, mouseY, 1, 1);
var red = p.data[0];
var green = p.data[1];
var blue = p.data[2];
var alpha = p.data[3];
}
}
}
我不确定它在这里是否相关,但正如我想我可以把它放在这里的一个信息一样,这对我很有用
谢谢