我正在使用Qt 4.6创建一个金色斑块网格。我使用QLabel作为我的小部件并将其父级设置为QPixmap,其中包含斑块的.jpg图像。然后小部件向上滚动屏幕。然而,现在我希望斑块在移动时发光。我认为QGraphicsEffect会有一个能够做到这一点的功能 - 就像它的dropShadowEffect,其中阴影改变了相对于光源的位置。以类似的方式,我正在寻找一种方法,当小部件移动时,每个牌匾的光泽会从光源反射出来。
所以,例如,这里有一个奖杯闪闪发光的金Gold Trophy或2nd Gold Trophy的例子(看看第二个上面的奖杯)。我希望能够为我的斑块添加相同的功能。任何帮助都会受到很大的影响
答案 0 :(得分:2)
这不是真正的反映,实现起来本身就很复杂。
这是一种笨拙的伪造,基本上你有一个从透明到白色到透明的动画线性渐变,当它穿过它时应该被应用的对象的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
}
}
结果:
此示例中的灯光将随鼠标位置移动。