【发布时间】:2015-06-13 14:02:27
【问题描述】:
我想在QML 中创建一个带有内阴影的矩形,类似于Photoshop 所做的:
QML 有 InnerShadow 但我无法达到这个效果。我得到的最接近的是这个
import QtQuick 2.0
import QtGraphicalEffects 1.0
Item {
id: root
width: 300
height: 300
Rectangle {
id: myRectangle
anchors.centerIn: parent
width: 100
height: 100
color: "grey"
}
InnerShadow {
anchors.fill: root
cached: true
horizontalOffset: 0
verticalOffset: 0
radius: 16
samples: 32
color: "#b0000000"
smooth: true
source: root
}
}
这是我从this 帖子中得到的一个想法。但是,此示例仅在 root 的大小明显大于 myRectangle 时才有效,而我不希望这样。我需要例如一个200x10 正方形,其中阴影均匀分布在矩形的边缘。我尝试了InnerShadow 属性的各种值,但我什至无法达到我想要的效果。
这可以使用QML 实现吗?
【问题讨论】:
-
看起来 QML 的内部阴影实现很蹩脚,我的猜测是“由图形设计背景为零的程序员完成”。您可以尝试使用自定义 GLSL 着色器来实现效果。
-
您只需要两个像素的偏移量即可获得正确的内阴影,这不是“明显更大”但肯定很难看。将它与根的颜色结合起来不起作用?如果没有,着色器是你唯一的朋友。
-
我用一张照片重复一遍,因为你没有回答我之前的建议。 something like this呢?
-
@BaCaRoZzo 您是如何实现这种效果的?我使用了
horizontalOffset: 1; verticalOffset: 1,这就是我所取得的成果:i.imgur.com/ltPZT9r.png,这不如你的结果。可以出示一下代码吗? -
已编写解决方案。看看它是否符合您的需求。
标签: c++ qt qml qt-quick qtquick2