专栏首页跟Qt君学编程Qml好用的default附加属性

Qml好用的default附加属性

Qml存在一个神秘附加属性(default)却是很少用,少用却是很好用。看看我这是怎么用的吧。

1.default附加属性

  • 组件内部( {}内)仅此一个default标记。
  • 被deault标记的属性可以使用外部对象,甚至还能使用外部对象的所有子控件。

2.示例1

  MyText.qml组件内部引用外部对象的两种方法。

import QtQuick 2.0

Text {
    default property variant textObject
    text: textObject.text
}

  方法一:

  • textObject值可以在MyText对象定义中赋值。
  • MyText的Text控件被引用到textObject中使用。
MyText {
    Text { text: "xxxxx" } // 默认传递给textObject值。
}

  方法二:

  • 上面操作等同于:
MyLabel {
    textObject: Text { text: "xxxxx" } // 等同于默认传递给textObject值。
}

3.例子2

  看似很没用的属性却说有用,还说好用。第一个例子看起来和常规做法差不多。那么我们看看第二个例子使用起来是如何好用的。   Group.qml组件:

import QtQuick 2.0

FocusScope {
    property alias title: title.text
    default property alias items: colume.children

    Text { id: title }

    Column {
        id: colume
        anchors.top: title.bottom
    }
}

  Group的使用:

Group {
    title: "title"

    Rectangle {
        width: 100; height: 50;
        color: "red"
    }

    Rectangle {
        width: 100; height: 50;
        color: "lightblue"
    }
}

  如果不使用该特性则需要这样做:   如需要多个地方使用则需要重复操作,管理不方便,且理解不直观。

Column {
    Text {
        text: "title"
    }

    Column {
        Rectangle {
            width: 100; height: 50;
            color: "red"
        }

        Rectangle {
            width: 100; height: 50;
            color: "lightblue"
        }
    }
}

效果:

4.最后

  从上面例子可以看到Group组件具备Column控件的布局功能,并扩展出类似于 GroupBox控件的功能。原因在于colume.children引用了Group的子控件触发自动布局。

  对于上面例子我们还可以内部操控items对象列表来操作Group上的子控件属性,如item[0].visible = false来隐藏红色矩形控件。

  这样做我们就可以增强组件的功能,降低代码量,特别是那些具备标题栏或某些附属栏的组合框

本文分享自微信公众号 - Qt君(qtjuna)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Dart 概览

    元数据注解是以 @ 字符开头,后面是一个编译时 常量(例如 deprecated)或者 调用一个常量构造函数。

    用户2930719
  • 史上最详细MySQL全局锁和表锁

    原文:http://www.enmotech.com/web/detail/1/728/1.html (复制链接,打开浏览器即可查看)

    数据和云01
  • 张量拼接_调整维度_切片

    tf.concat的作用主要是将向量按指定维连起来,其余维度不变;而1.0版本以后,函数的用法变成:

    于小勇
  • 美团面试,我竟然输给了冒泡排序。。。

    前一阵子有个读者在微信里跟我聊了一件很有趣的事情,他去美团实习,面试让他哭笑不得,因为败在了冒泡排序上。

    Java团长
  • 如何给女朋友解释什么是分布式和集群?

    某天,下班较早,我正在玩吃鸡,已经到决赛圈了,这时候,女朋友满脸求知欲的朝我走过来。

    Java团长
  • 003.Ceph扩展集群

    需求:添加Ceph元数据服务器node1。然后添加Ceph Monitor和Ceph Manager node2,node3以提高可靠性和可用性。

    木二
  • Dav1d移动端解码高清视频达30FPS

    LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒及技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。了解岗位信息...

    LiveVideoStack
  • Netflix:通过自适应音频码率提升音频体验

    文 / Guillaume du Pontavice、Phill Williams和KyleePeña(代表我们的流媒体算法,音频算法和创新技术团队)

    LiveVideoStack
  • jdk静态代理,jdk动态代理,cglib动态代理

    代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道。如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法...

    互扯程序
  • spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spr...

    凯哥Java

扫码关注云+社区

领取腾讯云代金券