Qt_Note10_QML_Component&Loader

在 QML 中,Component 和 Loader 是两个重要的元素,用于动态创建和加载其他 QML 组件。

Component(组件):

Component 是一个可重复使用的 QML 定义,类似于一个模板或类的概念。它可以定义一个独立的 QML组件,包含一组属性、信号、方法和子元素。Component 可以在需要的时候动态创建和实例化。
通过Component,你可以定义一个独立的 QML 组件,并在需要时以编程的方式创建该组件的实例。这种动态创建的方式使得 QML中的组件能够更加灵活地被使用和复用。

Loader(加载器):

Loader 用于在运行时动态加载和实例化 QML 组件。它允许你根据条件或事件的发生,在运行时选择性地加载一个 QML 组件到当前的QML 界面中。 Loader允许你异步加载和卸载组件,以及在必要时实例化它们。这对于需要根据运行时条件动态加载不同组件的场景非常有用。例如,在根据用户操作加载不同的页面或视图时,可以使用Loader 来管理这些动态加载的组件。 Loader 通常与 Component 配合使用,其中 Loader 负责加载和实例化Component 定义的组件。
总结起来,Component 和 Loader 是 QML 中用于动态创建和加载组件的重要工具。Component允许你定义可重复使用的组件模板,而 Loader 则负责在运行时根据需要加载和实例化这些组件。这种动态性和灵活性使得在 QML中实现动态布局和动态加载组件变得更加方便和可扩展。

//Component&Loader
    //    //创建时
    //    Component.onCompleted: {
    //        console.log("onCompleted", width, height, color)
    //    }
    //    //销毁时
    //    Component.onDestruction: {
    //        console.log("onDestruction")
    //    }

//        Component{
//            id: com
//            Rectangle{
//                id: rect
//                width: 200
//                height: 100
//                color: "black"
//                //Component&Loader
//                //创建时
//                Component.onCompleted: {
//                    console.log("onCompleted", width, height, color)
//                }
//                //销毁时
//                Component.onDestruction: {
//                    console.log("onDestruction")
//                }
//            }
//        }

    Component {
        id: com
        //AnimatedImage可以加载动图gif speed控制速度
        Image {
            id: img
            source: "/../../qt_learning3/MyQQ/Image/Luffy.png"
            sourceSize.width: 200
            sourceSize.height: 200
        }
    }

        Loader{
            id: loader
            asynchronous: true
            source: "/MyRectangle.qml"
//            source: "/../../qt_learning3/MyQQ/Image/Luffy.png" //loader.status = 3
            sourceComponent: com
            onStatusChanged: {
                console.log("status:",status)
            }
        }

        Button {
            x: 200
            width: 50
            height: 50
            onClicked: {
                //loader.item.paused = !loader.item.paused  //控制动图暂停继续播放
                loader.item.width = 50
                loader.item.height = 50
                loader.item.color = "red"
//                loader.sourceComponent = null
            }
        }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可可西里啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值