QML PieSlice渐变色

时间:2018-04-29 23:44:27

标签: qt qml qtchart

我在QML中使用PieSeries作为创建临时掩码的方法。 我有一个圆形动画gif,在它上面,我添加了一个PieSeries。 PieSeries有3个PieSlices。其中2个是"黑色"基本上阻挡了gif的相应部分。剩下的PieSlice是透明的。 这很好用,但我希望2个黑色的PieSlices有一个渐变,这样它们的边缘就不那么明显了(渐变透明度)。

我尝试使用带有OpacityMask的LinearGradient,如here所述,但在PieSlice上使用时没有任何效果。

任何建议都将受到赞赏:)

这是我的代码:

import QtQuick 2.0
import QtCharts 2.2
import QtGraphicalEffects 1.0

Item {
    anchors.fill: parent //Fill the gif area

    ChartView {
        id: chart
        anchors.centerIn: parent
        height: parent.height+200
        width: parent.width
        legend.visible: false
        antialiasing: false
        backgroundColor: "transparent"

        PieSeries {
            id: pieOuter
            size: 1.5
            holeSize: 0.2
            PieSlice { id: black1; value: 1; color: "black"; borderColor: "transparent" }
            PieSlice { id: valSlice; value: d.val; color: "transparent"; borderColor: "transparent" }
            PieSlice { id: black2; value: 1 - d.val; color: "black"; borderColor: "transparent" }
        }

    }
    OpacityMask{
        source: mask
        maskSource: black1
    }
    LinearGradient {
        id: mask
        anchors.fill: black1
        gradient: Gradient {
            GradientStop { position: 0.2; color: "transparent"}
            GradientStop { position: 0.5; color: "white" }
        }
    }

}

注意:d.val此处包含0到1之间的值

修改 一些图像可以帮助我看到我想要实现的目标: 我开始使用的GIF(source - 原始文件太大而无法附加):

Snapshot of original Gif

这就是目前的动画效果:

Low d.val

Higher d.val

Max d.val

这就是我想要的实际外观(这里描述的是d.val):

Higher d.val with gradient

0 个答案:

没有答案