c++ - Qt 获取 QWidget 来反射光线

标签 c++ qt

我正在使用 Qt 4.6 创建一个金色斑 block 网格。我已经这样做了,使用 QLabel 作为我的小部件并将其父级设置为 QPixmap,其中包含一个斑 block 的 .jpg 图像。小部件然后在屏幕上滚动到看不见的地方。但是,现在我希望斑 block 在移动时发光。我认为 QGraphicsEffect 会有一个函数可以做到这一点——就像它的 dropShadowEffect 一样,阴影会根据光源改变位置。以类似的方式,我正在寻找一种方法,当小部件移动时,每个斑 block 的光泽都会从光源反射。

例如,这是一个闪闪发光的金色奖杯的例子 Gold Trophy2nd 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
    }
}

结果:

enter image description here

本例中的灯光会随着鼠标的位置移动。

关于c++ - Qt 获取 QWidget 来反射光线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399621/

相关文章:

c++ - 在 Windbg 中,如何在调试时列出枚举的值?

linux - 使用 -rpath 加载 QLibrary

c++ - Qt 信号转发 - 我做错了什么?

c++ - 当鼠标悬停在 QPushButton 上时,alpha 级别为 0% 的 QPushButton 变为实心。如何用 C++ 修复 Qt(用样式表?)

c++ - 如何让 Qt Websocket 和 QNetworkRequest (HTTP) 使用同一个连接?

c++ - 如何在单元质心处存储 vtkUnstructuredGrid 的 vector 场

c++ - 如何将自定义特征张量类存储到 std::vector 中?

c++ - g++ std::bind 错误与 shared_ptr

qt - 在 Qt/Windows 中使用 gSoap

c++ - openCV:imshow 如何处理负值?