如何在 ShapePath 中使用 LinearGradient?

How to use the LinearGradient in a ShapePath?

我想在自定义形状内绘制渐变。我以前使用过 属性 fillColor,现在尝试使用 属性 fillGradient。形状很好我会说 - 至少它看起来像预期的那样 :) 这个渐变的东西无论如何都不好。它看起来不像预期的那样。

这是我想做的。这应该 运行 就像在 Qt Design Studio 中一样。

import QtQuick 2.15 
import QtQuick.Controls 2.15 
import QtQuick.Shapes 1.15 

Rectangle {
    id: btn
    color: "white"

    readonly property alias fieldHeight: p.fieldHeight

    Shape {
        ShapePath {
            id: p
            property int r: 172
            property int fieldWidth: 123
            property int fieldHeight: 79
            property int deltaX: 30
            startX: 0
            startY: 0
            strokeColor: "black"
            strokeStyle: ShapePath.SolidLine
            fillGradient: LinearGradient {
                GradientStop {
                    position: 0
                    color: "#6c6c6c"
                }
                GradientStop {
                    position: 1
                    color: "#000000"
                }
            }
            PathArc {
                id: upperBorder
                x: p.fieldWidth
                y: 0
                radiusX: p.r
                radiusY: p.r
            }
            PathLine {
                x: p.fieldWidth - p.deltaX
                y: p.fieldHeight
            }
            PathArc {
                x: p.deltaX
                y: p.fieldHeight
                radiusX: p.r
                radiusY: p.r
                direction: PathArc.Counterclockwise
            }
            PathLine {
                x: 0
                y: 0
            }
        }
    }
}

问题是您没有指定渐变应遵循的直线的起点和终点。恼人的是,Qt 有 2 个不同的对象,称为 LinearGradient,它们有不同的 属性 名称。一个来自QtGraphicalEffects,另一个来自QtQuick.Shapes。您使用的是形状版本,因此您的渐变应如下所示:

fillGradient: LinearGradient {
    x1: 0
    y1: 0
    x2: p.fieldWidth
    y2: p.fieldHeight

    GradientStop {
        position: 0
        color: "#6c6c6c"
    }
    GradientStop {
        position: 1
        color: "#000000"
    }
}