Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何动态更新矩形';s梯度?_Qt_Qml - Fatal编程技术网

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];
        }
    }
}
我不确定它在这里是否相关,但正如我想我可以把它放在这里的一个信息一样,这对我很有用 谢谢