动态Qml(三-创建和销毁对象)

  • 加载一块QML代码时,它首先会被解释执行为一个组件。
  • 这一步包含了加载依赖和验证代码。
  • QML的来源可以是本地文件,Qt资源文件,或者一个指定的URL网络地址——这意味着加载时间不确定
  • 组件创建之后,它的状态可以用来跟踪它的状态属性。
  • 可以使用的状态值包括:
  1. 组件为空 (Component.NULL)
  2. 组件加载中(Component.Loading)
  3. 组件可用 (Component.Ready)
  4. 组件错误(Component.Error)
  • 从空(NULL)状态到加载中(Loading)再到可用(Ready)通常是一个工作流
  • 在任何一个阶段状态都可以变为错误(Error),在这种情况下,组件无法被用来创建新的对象实例
  • 当加载连接缓慢的组件时,可以使用进度(progress)属性。它的范围从0.0意味着为加载任何东西,到1.0表明加载已完成

注解:先创建组件,此时需要放入组件文件(QML文件)所在的路径,然后使用创建出来的组件创建对象,参数为父亲、坐标!

代码:

import QtQuick 2.5

Image {
    width: 400
    height: 225
    anchors.fill: parent
    source: "image1.png"

    Image {
        id: overlay

        anchors.fill: parent

        source: "image2.png"

        opacity: 0;
        Behavior on opacity { NumberAnimation { duration: 300 } }
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            if (overlay.opacity === 0)
                overlay.opacity = 1;
            else
                overlay.opacity = 0;
        }
    }
}

这是组件文件,逻辑很简单!

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 400
    height: 225
    title: qsTr("Hello World")

    Item {
        id: root
        anchors.fill: parent
        Component.onCompleted: createImageObject()
    }

    // js 代码
    // 创建组件的函数
    function createImageObject() {
        // ----
        // 创建组件
        var component = Qt.createComponent("qrc:/new/preFile/dynamic-image.qml")
        if (component.status === Component.Ready ||
                component.status === Component.Error) {
            finishCreation(component)
        } else {
            component.statusChanged.connect(finishCreation)
        }
    }

    function finishCreation(component) {
        if (component.status === Component.Ready) {
            // ----
            // 使用组件创建对象
            // root 父亲 / x,y 坐标
            var image = component.createObject(root,{"x": 100, "y": 100})
            if (image === null) {
                console.log("Error creating image")
            }
        } else if (component.status === Component.Error) {
            console.log("Error loading component:", component.errorString())
        }
    }
}

这个是main.qml文件,用于创建组件和对象并且判断状态!

只要由创建组件和对象的JS函数存在,我们可以随时创建,这里为了方便刚开始就创建了!

动态创建对象成功!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柔弱胜刚强.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值