我正在使用 Qt 4.6 创建一个金色斑 block 网格。我已经这样做了,使用 QLabel 作为我的小部件并将其父级设置为 QPixmap,其中包含一个斑 block 的 .jpg 图像。小部件然后在屏幕上滚动到看不见的地方。但是,现在我希望斑 block 在移动时发光。我认为 QGraphicsEffect 会有一个函数可以做到这一点——就像它的 dropShadowEffect 一样,阴影会根据光源改变位置。以类似的方式,我正在寻找一种方法,当小部件移动时,每个斑 block 的光泽都会从光源反射。
例如,这是一个闪闪发光的金色奖杯的例子 Gold Trophy或 2nd Gold Trophy (看看上面写着 2nd 的奖杯)。我希望能够为我的牌匾添加相同的功能。任何帮助将不胜感激
最佳答案
这并不是真正的反射,它本身实现起来相当复杂。
这是一个笨拙的伪造,基本上你有一个动画线性渐变,从透明到白色再到透明,它被它应该应用到的对象的 alpha 掩盖,因为它在它上面移动。
如果您正在寻找一种在 Qt 中执行此操作的方法,那绝对不是 QtWdigets
,它的效率会非常低。正确的工具是 QML - 这就是它的简单之处:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
import QtGraphicalEffects 1.0
ApplicationWindow {
id: main
width: 200
height: 200
visible: true
color: "black"
Grid {
x: 15
y: 15
id: grid
rows: 3
columns: 3
spacing: 10
Repeater {
model: 9
Rectangle {
radius: 10
width: 50
height: 50
color: "gold"
border.color: "orange"
border.width: 5
}
}
}
LinearGradient {
id: effect
anchors.fill: grid
source: grid
rotation: -90
property real p : pos.mouseX / pos.width
gradient: Gradient {
GradientStop { position: effect.p - 0.05; color: "#00FFFFFF"}
GradientStop { position: effect.p; color: "#FFFFFFFF"}
GradientStop { position: effect.p + 0.05; color: "#00FFFFFF"}
}
}
MouseArea {
id: pos
anchors.fill: grid
hoverEnabled: true
}
}
结果:
本例中的灯光会随着鼠标的位置移动。
关于c++ - Qt 获取 QWidget 来反射光线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399621/