zoukankan      html  css  js  c++  java
  • QML 入门

    学习资料:

    https://doc.qt.io/qt-5/qmlreference.html

    https://www.qter.org/forum.php?mod=viewthread&tid=193

    QtCreator IDE Example (非常好的学习材料,官方Demo ,值得学习~)

    Demo:

    01 红绿灯:

    https://doc.qt.io/qt-5/qtscxml-trafficlight-qml-dynamic-example.html 

    代码:

    https://files.cnblogs.com/files/zach0812/%E5%8A%A8%E6%80%81%E7%BA%A2%E7%BB%BF%E7%81%AF.zip

    效果:

    02 动画足球:

    import QtQuick 2.12
    import QtQuick.Window 2.12
    
    
    Window {
        id: root
        visible: true
        title: qsTr("Hello World")
         800
        height: 600
        property int duration: 3000
    
        Rectangle {
            id: sky
             parent.width
            height: 400
            gradient: Gradient {
                GradientStop { position: 0.0; color: "#0080FF" }
                GradientStop { position: 1.0; color: "#66CCFF" }
            }
        }
        Rectangle {
            id: ground
            anchors.top: sky.bottom
             parent.width
            anchors.bottom: parent.bottom
            anchors.bottomMargin: 0
            gradient: Gradient {
                GradientStop { position: 0.0; color: "#1aee1a" }
                GradientStop { position: 1.0; color: "#00803F" }
            }
        }
    
        Image {
            id: ball
            x: 20; y: 240
            source: "images/soccer_ball.png"
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    ball.x = 20; ball.y = 240
                    anim.restart()
                }
            }
        }
        ParallelAnimation {
            id: anim
            SequentialAnimation {
                // ... our Y1, Y2 animation
                NumberAnimation {
                    target: ball
                    properties: "y"
                    to: 20
                    duration: root.duration * 0.4
                    easing.type: Easing.OutCirc
                }
                NumberAnimation {
                    target: ball
                    properties: "y"
                    to: 240
                    duration: root.duration * 0.6
                    easing.type: Easing.OutBounce
    
                }
            }
            NumberAnimation { // X1 animation
                target: ball
                properties: "x"
                to: 400
                duration: root.duration
            }
            RotationAnimation {
                target: ball
                properties: "rotation"
                from:0
                to: 720
                duration: root.duration*1.1
            }
        }
    }
    main.qml

    效果图:

    03 动态添加和移除元素:

    import QtQuick 2.12
    import QtQuick.Window 2.12
    
    
    Window {
        id: root
        visible: true
        title: qsTr("Hello World")
         800
        height: 600
    
    
        Rectangle {
             480
            height: 300
            color: "yellow"
            ListModel {
                id: theModel
                ListElement { number: 0 }
                ListElement { number: 1 }
                ListElement { number: 2 }
                ListElement { number: 3 }
                ListElement { number: 4 }
                ListElement { number: 5 }
                ListElement { number: 6 }
                ListElement { number: 7 }
                ListElement { number: 8 }
                ListElement { number: 9 }
            }
            Rectangle {
                anchors.left: parent.left
                anchors.right: parent.right
                anchors.bottom: parent.bottom
                anchors.margins: 20
                height: 40
                color: "darkGreen"
                Text {
                    anchors.centerIn: parent
                    text: "Add item!"
                }
                MouseArea {
                    anchors.fill: parent
                    onClicked: {
                        theModel.append({"number": ++parent.count});
                    }
                }
                property int count: 9
            }
            GridView {
                anchors.fill: parent
                anchors.margins: 20
                anchors.bottomMargin: 80
                clip: true
                model: theModel
                cellWidth: 45
                cellHeight: 45
                delegate: numberDelegate
            }
            Component {
                id: numberDelegate
                Rectangle {
                    id: wrapper
                     40
                    height: 40
                    color: "lightGreen"
                    Text {
                        anchors.centerIn: parent
                        font.pixelSize: 10
                        text: number
                    }
                    MouseArea {
                        anchors.fill: parent
                        onClicked: {
                            if (!wrapper.GridView.delayRemove)
                                theModel.remove(index);
                        }
                    }
                    GridView.onRemove: SequentialAnimation {
    
                        PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: true }
                        NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: Easing.InOutQuad }
                        PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: false }
                    }
                    GridView.onAdd: SequentialAnimation {
                        NumberAnimation { target: wrapper; property: "scale"; from: 0; to: 1; duration: 250; easing.type: Easing.InOutQuad }
                    }
                }
            }
        }
    
    
    }
    main.qml

    效果图:

    04 Shape Shift:

    import QtQuick 2.12
    import QtQuick.Window 2.12
    
    
    Window {
        id: root
        visible: true
        title: qsTr("Hello World")
         800
        height: 600
    
    
        Item {
             300
            height: 480
            ListView {
                id: listView
                anchors.fill: parent
                delegate: detailsDelegate
                model: planets
            }
            ListModel {
                id: planets
                ListElement { name: "Mercury"; imageSource: "images/mercury.jpeg"; facts: "Mercury is the smallest planet in the Solar System. It is the closest planet to the sun. It makes one trip around the Sun once every 87.969 days." }
                ListElement { name: "Venus"; imageSource: "images/venus.jpeg"; facts: "Venus is the second planet from the Sun. It is a terrestrial planet because it has a solid, rocky surface. The other terrestrial planets are Mercury, Earth and Mars. Astronomers have known Venus for thousands of years." }
                ListElement { name: "Earth"; imageSource: "images/earth.jpeg"; facts: "The Earth is the third planet from the Sun. It is one of the four terrestrial planets in our Solar System. This means most of its mass is solid. The other three are Mercury, Venus and Mars. The Earth is also called the Blue Planet, 'Planet Earth', and 'Terra'." }
                ListElement { name: "Mars"; imageSource: "images/mars.jpeg"; facts: "Mars is the fourth planet from the Sun in the Solar System. Mars is dry, rocky and cold. It is home to the largest volcano in the Solar System. Mars is named after the mythological Roman god of war because it is a red planet, which signifies the colour of blood." }
            }
            Component {
                id: detailsDelegate
                Item {
                    id: wrapper
                     listView.width
                    height: 30
                    Rectangle {
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.top: parent.top
                        height: 30
                        color: "#ffaa00"
                        Text {
                            anchors.left: parent.left
                            anchors.verticalCenter: parent.verticalCenter
                            font.pixelSize: parent.height-4
                            text: name
                        }
                    }
                    Rectangle {
                        id: image
                        color: "black"
                        anchors.right: parent.right
                        anchors.top: parent.top
                        anchors.rightMargin: 2
                        anchors.topMargin: 2
                         26
                        height: 26
                        Image {
                            anchors.fill: parent
                            fillMode: Image.PreserveAspectFit
                            source: imageSource
                        }
                    }
                    MouseArea {
                        anchors.fill: parent
                        onClicked: parent.state = "expanded"
                    }
                    Item {
                        id: factsView
                        anchors.top: image.bottom
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.bottom: parent.bottom
                        opacity: 0
                        Rectangle {
                            anchors.fill: parent
                            color: "#cccccc"
                            Text {
                                anchors.fill: parent
                                anchors.margins: 5
                                clip: true
                                wrapMode: Text.WordWrap
                                font.pixelSize: 12
                                text: facts
                            }
                        }
                    }
                    Rectangle {
                        id: closeButton
                        anchors.right: parent.right
                        anchors.top: parent.top
                        anchors.rightMargin: 2
                        anchors.topMargin: 2
                         26
                        height: 26
                        color: "red"
                        opacity: 0
                        MouseArea {
                            anchors.fill: parent
                            onClicked: wrapper.state = ""
                        }
                    }
                    states: [
                        State {
                            name: "expanded"
                            PropertyChanges { target: wrapper; height: listView.height }
                            PropertyChanges { target: image;  listView.width; height: listView.width; anchors.rightMargin: 0; anchors.topMargin: 30 }
                            PropertyChanges { target: factsView; opacity: 1 }
                            PropertyChanges { target: closeButton; opacity: 1 }
                            PropertyChanges { target: wrapper.ListView.view; contentY: wrapper.y; interactive: false }
                        }
                    ]
                    transitions: [
                        Transition {
                            NumberAnimation {
                                duration: 200;
                                properties: "height,width,anchors.rightMargin,anchors.topMargin,opacity,contentY"
                            }
                        }
                    ]
                }
            }
        }
    
    
    }
    main.qml

    效果图:

     

  • 相关阅读:
    新概念英语第四册16-30课(转)
    新概念英语第四册01-15课(转)
    通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建(转载)
    BASE64编码规则及C#实现
    Lucene资料汇总
    SQL Server性能监控
    Fedex接口和测试账户
    css语法
    POI操作Excel常用方法总结 (转)
    java eclipse中的代码联动提示功能
  • 原文地址:https://www.cnblogs.com/zach0812/p/13246279.html
Copyright © 2011-2022 走看看