我已经制作了自己的斜角效果,这在将图形艺术家的PDF移植到QML类似的东西时非常有用,因为Photoshop有一个斜角效果,基本上是两个InnerShadow
s,一个左/上,另一个右/下。
看起来像这样:
import QtQuick 2.5
import QtGraphicalEffects 1.0
Item {
id: root
property var source: null
property color topColor: "white"
property color bottomColor: "black"
property real radius: 1
property real spread: 0.1
property real thickness: 1
InnerShadow {
id: bevelTop
cached: true
source: root.source
anchors.fill: parent
radius: root.radius
samples: root.radius * 2
spread: root.spread
horizontalOffset: root.thickness
verticalOffset: root.thickness
color: root.topColor
visible: false
}
InnerShadow {
id: bevelBottom
cached: true
source: bevelTop
anchors.fill: source
radius: root.radius
samples: root.radius * 2
spread: root.spread
horizontalOffset: -root.thickness
verticalOffset: -root.thickness
color: root.bottomColor
}
}
样本用法:
Item {
id: containerNormal
anchors.fill: parent
Rectangle {
id: rectangleNormal
anchors.fill: parent
gradient: root.normalGradient
radius: root.radius
visible: false
}
Bevel {
id: bevelNormal
anchors.fill: parent
source: rectangleNormal
topColor: "#88ffffff"
bottomColor: "#88000000"
opacity: 0.5
}
}
......它看起来很棒!唯一的问题是 - 它杀死性能,因为我在我的应用程序中的任何地方使用它,有时在Repeater
中使用50-100个元素。
问题是,尽管有Bevel
,但每个元素的计算结果完全相同cached: true
- 我的应用程序花费大约98%的时间计算InnerShadow
秒。
所以我的问题是,是否有可能利用某种类型的池,其中Qt只需要计算一次,只要它应用的Component
具有相同的边界? / p>
谢谢。