聚热点 juredian

QML做图片倒影效果(控件倒影)

前言

用 QML 做图片倒影,主要是用ShaderEffect组件来实现,先来看看实际效果,如下:

还可以用同样的方式来做其他控件倒影,例如:

正文

直接来看源码

import QtQuick 2.0import QtQuick.Controls 1.4Rectangle {    id: window    width: 600    height: 500    gradient: Gradient {        GradientStop { position: 0; color: "lightsteelblue" }        GradientStop { position: 1; color: "black" }    }    Image {        id: img        width: 300        height: 170        source: "car.png"        anchors.centerIn: parent    }    ShaderEffect {        anchors.top: img.bottom        width: img.width        height: img.height        anchors.left: img.left        property variant source: img        property size sourceSize: Qt.size(0.5 / img.width, 0.5 / img.height)        fragmentShader: "            varying highp vec2 qt_TexCoord0;            uniform lowp sampler2D source;            uniform lowp vec2 sourceSize;            uniform lowp float qt_Opacity;            void main() {                lowp vec2 tc = qt_TexCoord0 * vec2(1, -1) + vec2(0, 1);                lowp vec4 col = 0.25 * (texture2D(source, tc + sourceSize)                                        + texture2D(source, tc- sourceSize)                                        + texture2D(source, tc + sourceSize * vec2(1, -1))                                        + texture2D(source, tc + sourceSize * vec2(-1, 1))                                       );                gl_FragColor = col * qt_Opacity * (1.0 - qt_TexCoord0.y) * 0.2;            }"

若要拓展做其他控件倒影,只需要修改property variant source: img 对象即可.

还有一种比较简单的容易理解的方式来实现同样的效果

import QtQuick 2.0import QtQuick.Controls 1.4Rectangle {    id:600    height: 500    gradient: Gradient {        GradientStop { position: 0; color:"lightsteelblue"}        GradientStop { position:1; color:"black"}    }    Image {        id:300        height: 170        source: "car.png"}    Item{            width:1                    origin.y:img.height/2.                }            }            LinearGradient{                width:0.0;color:Qt.rgba(0,0,0,0.1)}                    GradientStop{position:0.4;color:Qt.rgba(0,0,0,1)}                }            }        }}

原理是先通过设置一张倒着的图片,然后在图片上添加一个渐变层,代码很简单

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:QML做图片倒影效果  倒影  倒影词条  控件  控件词条  效果  效果词条  图片  图片词条  QML  QML词条  
热文

 小学父爱如山作文400字

有关小学父爱如山作文400字锦集六篇在日常学习、工作或生活中,大家一定都接触过作文吧,作文是人们把记忆中所存储的有关知识、经验和思想用书面形式表达出来的记叙方式...(展开)