QML:Fluid Elements

2024-05-03 04:48
文章标签 elements qml fluid

本文主要是介绍QML:Fluid Elements,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//Fluid Elements
//动画:
//animation.qml
import QtQuick 2.0
Image{
    source: "assets/background.png"
    Image{
        x: 40; y: 80
        source: "assets/rocket.png"
        NumberAnimation on x{
            to : 240
            duration: 4000
            loops: Animation.Infinite
        }
        RotationAnimation on rotation{
            to: 360
            duration: 4000
            loops: Animation.Infinite
        }
    }
}
/************************************************************************************************************/
//动画元素:
PropertyAnimation(属性动画) —— 使用属性值改变播放的动画
NumberAnimation(数字动画) —— 使用数字改变播放的动画
ColorAnimation(颜色动画) —— 使用颜色改变播放的动画
RotationAnimation(旋转动画) —— 使用旋转改变播放的动画
//一些特殊场景下使用的动画
PauseAnimation(暂停动画)
SequentialAnimation(顺序动画)
ParallelAnimation(并行动画)
ParentAnimation(父元素动画) —— 使用父对象改变播放的动画
SmoothedAnimation(平滑动画)
SpringAnimation(弹簧动画)
PathAnimation(路径动画)
Vector3dAnimation(3D容器动画) ——使用QVector3d值改变播放的动画
//播放一个动画时改变一个属性或运行一个脚本
PropertyAction(属性动作) —— 播放动画时改变属性
ScriptAction(脚本动作) —— 播放动画时运行脚本
/************************************************************************************************************/
//应用动画
* 属性动画: 在元素完整加载后自动运行
* 属性动作: 当属性值改变时自动运行
* 独立运行动画: start()明确指定运行,或running属性设置为true
//ClickableImageV2.qml
import QtQuick 2.0
Item{
    id: root
    width: container.childrenRect.width  //这样一来就不能给组件设置宽高了
    height: container.childrenRect.height
    property alias text: label.text
    property alias source: image.source
    signal clicked
 
    Column{
        id: container
        Image{
            id: image
        }
        Text{
            id: label
            width: image.width
            horizontalAlignment: Text.AlignHCenter
            wrapMode: Text.WordWrap
            color: "#111111"
        }
    }
    MouseArea{
        anchors.fill: parent
        onClicked: root.clicked()
    }
}
//三个火箭位于相同的y轴坐标,都需移动到y = 40,使用三个不同的方法来完成这个功能:
ClickableImageV3{       //NumberAnimation on
    id: rocket1
    x: 40; y: 200
    source: "assets/rocket2.png"
    text: "animation on property"
    NumberAnimation on y{
        to: 40;
        duration: 4000
    }
}
//动画加载完成立即播放,点击火箭会回到开始的位置
ClickableImageV3{
    id: rocket3
    x: 264; y: 200
    source: "assets/rocket2.png"
    text: "behavior on property"
    Behavior on y{      //这个行为告诉属性值每时每刻都在变化
        NumberAnimation{
            duration: 4000
        }
    }
    onClicked: y = 40
    //onClicked: y = 40 + Math.random() * (205-40)
}
//点击火箭时运行,可通过行为元素的enabled: false设置行为失效
ClickableImageV3{
    id: rocket3
    x: 264; y: 200
    source: "assets/rocket2.png"
    onClicked: anim.start()
    // onClicked: anim.restart()
    text: "standalone animation"
    NumberAnimation{
        id: anim
        target: rocket3
        properties: "y"
        from: 205  //允许动画可以重复运行
        to: 40
        duration: 4000
    }
}
//独立动画策略,点击背景可以回到起始位置
//另一个启动/停止动画的方法是绑定一个动画的running属性,当需要用户输入控制属性时非常有用
NumberAnimation{
    ...
    running: area.pressed
}
MouseArea{
    id: area
}
/************************************************************************************************************/
缓冲曲线:

//ClickableImageV2.qml
import QtQuick 2.0
Item{
    id: root
    width: container.childrenRect.width + 16
    height: container.childrenRect.height + 16
    property alias text: label.text
    property alias source: image.source
    signal clicked
 
    property bool framed: false
 
    Rectangle{
        anchors.fill: parent
        color: "white"
        visible: root.framed
    }
}
//easingtypes.qml
import QtQuick 2.0
DarkSquare{
    id: root
    width: 600
    height: 340
    property variant easings:[
    "Linear","InQuad","OutQuid","InOutQuad","InCubic","InSine",
    "InCirc","InElastic","InBack","InBounce"]
    Gird{
        id: container
        anchors.top: parent.top
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.margins: 16
        height: 20
        columns: 5
        spacing: 16
        Repeater{
            model: easings
            ClickableImageV3{
                framed: true
                text: modelData
                source: "curves/" + modelData + ".png"
                onClicked: {
                    anim.easing.type = modelData
                    anim.restart();
                }
            }
        }
    }
    GreenSquare{
        id: square
        x: 40; y: 260
    }
    NumberAnimation{
        id: anim
        target: square
        from: 40; to : root.width - 40 - square.width
        properties: "x"
        duration: 2000
    }
}
//easing.amplitude(缓冲振幅); easing.overshoot(缓冲溢出); easing.period(缓冲周期)
/************************************************************************************************************/
//动画分组:
//如果想同时运行几个动画,顺序执行几个动画,或在两个动画之间执行一个脚本,动画分组提供了很好的帮助
//parallelanimation.qml
import QtQuick 2.0
BrightSquare{
    id: root
    width: 300
    height: 200
    property int duration: 3000
 
    ClickableImageV3{
        id: rocket
        x: 20; y: 120
        source: "assets/rocket2.png"
        onClicked: anim.restart()
    }
    ParallelAnimation{
        id: anim
        NumberAnimation{
            target: rocket
            properties: "y"
            to: 20
            duration: root.duration
        }
        NumberAnimation{
            target: rocket
            properties: "x"
            to: 160
            duration: root.duration
        }
    }
}

//sequentialanimation.qml
import QtQuick 2.0
BrightSquare{
    id: root
    width: 300
    height: 200
    property int duration: 3000
 
    ClickableImageV3{
        id: rocket
        x: 20; y: 120
        source: "assets/rocket2.png"
        onClicked: anim.restart()
    }
 
    SequentialAnimation{
        id: anim
        NumberAnimation{
            target: rocket:
            properties: "y"
            to: 20
            duration: root.duration * 0.6
        }
        NumberAnimation{
            target: rocket
            properties: "x"
            to: 160
            duration: root.duration * 0.4
        }
    }
}
/************************************************************************************************************/
//一个足球的例子:

 
import QtQuick 2.0
Item{
    id: root
    width: 400
    height: 300
    property in duration: 3000
 
    Rectangle{
        id: sky
        width: parent.width
        height: 200
        gradient.Gradient{
            GradientStop{ position: 0.0; color: "#0080FF" }
            GradientStop{ position: 1.0; color: "#66CCFF" }
        }
    }
    Rectangle{
        id: ground
        anchors.top: sky.bottom
        anchors.bottom: root.bottom
        width: parent.width
        gradient: Gradient{
            GradientStop{ position: 0.0; color: "#00FF00" }
            GradientStop{ position: 1.0; color: "#00803F" }
        }
    }
 
    Image{
        id: ball
        x: 20; y: 240
        source: "assets/soccer_ball.png"
 
        MouseArea{
            anchors.fill: parent
            onClicked:{
                ball.x = 20; ball.y = 240
                anim.restart()
            }
        }
    }
 
    ParallelAnimation{
        id: anim
        SequentialAnimation{
            NumberAnimation{
                target: ball
                property: "y"
                to: 20
                duration: root.duration * 0.4
                easing.type: Easing.OutCirc
            }
            NumberAnimation{
                target: ball
                property: "y"
                to: 240
                duration: root.duration * 0.6
                easing.type: Easing.OutBounce
            }
        }
        NumberAnimation{
            target: ball
            property: "x"
            to: 400
            duration: root.duration
        }
        RotationAnimation{
            target: ball
            properties: "rotation"
            to: 720
            duration: root.duration * 1.1
        }
    }
}
/************************************************************************************************************/
状态与过渡:
Item{
    id: root
    states:[    //注意中括号
        State{
            name: "go"
            propertyChanges{...}
        },   //注意逗号
        State{
            name: "stop"
            PropertyChanges {...}
        }
    ]
}
//另一种切换属性的方法是使用状态元素的when属性。
/************************************************************************************************************/
//状态与过渡交通信号灯举例:
Rectangle{
    id: light1
    x: 25; y: 15
    width : 100; height: width
    radius: width/2
    color: "black"
}
Rectangle{
    id: light2
    x: 26; y: 135
    width: 100; height: width
    radius: width/2
    color: "black"
}
 
states:[
    State {
        name: "stop"
        PropertyChanges {
            target: light1
            color: "red"
        }
        propertyChanges{
            target: light2; color: "black"
        }
    }
    State{
        name: "go"
        PropertyChanges{ target: light1; color: "black" }
        PropertyChanges{ target: light2; color: "green" }
    }
]
MouseArea{
    anchors.fill: parent
    onClicked: parent.state = (parent.state == "stop" ? "go" : "stop")
}
//过渡
transitions; [
    Transition{
        from: "stop"; to: "go"
        ColorAnimation{ target: light1; properties: "color"; duration: 2000 }
        ColorAnimation{ target: light2; properties: "color"; duration: 2000 }
    }
]
 
 
 
 
 
 
 
 
 
 
 
 

                                    

这篇关于QML:Fluid Elements的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955856

相关文章

qml states 状态

states 状态 在QML中,states用于定义对象在不同状态下的属性变化。每个状态可以包含一组属性设置,当状态改变时,这些属性设置会被应用到对象上。 import QtQuick 2.15import QtQuick.Controls 2.15// 定义应用程序的主窗口ApplicationWindow {visible: true // 使窗口可见width: 640 /

QML入门之基本元素

元素分为可视元素与非可视元素,可能元素例如Rectangle、Button等。非可视元素如Timer(定时器)、MouseArea(鼠标区域)等。非可视元素一般用于操作可视元素。 基础元素 Item Item(基础元素对象)是所有可视元素的基础对象,它们都继承自Item。可是元素存在以下共有属性。 Group(分组)Properties(属性)Geometry(几何属性)x

27. Remove Elements

题目: 解答: 类似题26,注意下删除后的元素的移动方式即可 代码: class Solution {public:int removeElement(vector<int>& nums, int val) {if(nums.empty()) return 0;int len = nums.size();int lenafter = 0, head = 0;for(int i

【Qml】QML QQuickImage: Cannot open

环境: Cmake + Qt6 + Qml 问题: 在学习Qml的时候,使用到Image元素。用Image展示图片的时候,图片放在qrc资源文件中。但是运行程序,显示QML QQuickImage: Cannot open:导致图片无法正常显示。 如下: 解决方法: 在CMakeLists.txt文件中添加set(CMAKE_AUTORCC ON)这句即可。启用了 CMake 自动

Qt/QML学习-Calendar

QML学习 Calendar例程视频讲解代码 main.qml import QtQuick 2.15import QtQuick.Window 2.15import QtQuick.Controls 1.4import QtQuick.Controls.Styles 1.4import QtQuick.Controls 2.15Window {width: 640height: 4

Qt/QML学习-Dialog

QML学习 Dialog例程视频讲解代码 main.qml import QtQuick 2.15import QtQuick.Window 2.15import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("Dialog")Dialog {id: dialoganchors.cen

【qml实现TCP服务器】

Question qml实现TCP服务器 Answer 在QML中实现TCP服务器需要借助C++来处理底层的网络通信,因为QML本身并不直接支持TCP服务器功能。我们可以通过在C++中实现TCP服务器,然后在QML中通过Qt Quick的Connections元素与C++对象进行交互。以下是一个简单的示例,展示如何实现这一过程。 C++部分 首先,我们需要在C++中实现一个TCP服务器类

qml import 自定义模块 cmake

在 CMake 项目中配置和使用自定义 QML 模块的详细步骤: 1. 创建自定义 QML 模块 创建模块目录: 在 Qt 项目中创建一个目录来存放自定义 QML 模块,例如 MyModule。 在该目录中创建一个 qmldir 文件和你自定义的 QML 文件。 MyModule/qmldir: module MyModuleMyComponent 1.0 MyComponent.qml

简单的qml 属性浏览器

简单的qml 属性浏览器 Github qt-quick-qml-property-browser 有用的话点个star 基于quick2 TableView实现,主要思想是根据model type role 的数据确认该项的类型, 使用Loader分类别加载对应类型的组件(string、int、double、bool和enum)。 我知道在Qt.labs.qmlmodels中有更好的deleg

使用 QML 类型系统注册 C++ 类型

使用 QML_ELEMENT 和相关的注册宏来注册 C++ 类型到 QML 类型系统是一个非常强大的功能,它使得在 QML 中使用 C++ 类型变得非常方便。这里是一个详细的步骤说明,展示如何使用这些宏来注册一个 C++ 类,并确保它可以在 QML 中被正确使用。 步骤 1: 准备 C++ 类 首先,创建一个 C++ 类,例如 Message,并使用 QML_ELEMENT 宏进行标记。 m