【qt】动态属性(下)

一.最简单的属性

想要对一个数据成员进行读和写我们一般都会使用set或者get这种类型的自定义的函数去间接访问,且使用非常的频繁。

因此咱们有一个最简单的属性,不用再自己去定义读写的方法,就可以直接可以进行读和写。
在这里插入图片描述

关键字就是的 MEMBER 成员,什么都不用做,只需要添加一个成员数据,跟MEMBER后面的变量名一样即可。
在这里插入图片描述
然后咱们就可以直接使用了。
我们可没有定义方法哦,就可以直接进行读和写操作了。
在这里插入图片描述
运行结果:
在这里插入图片描述

二.访问类的所有属性

通过上面的用法,我可以渐渐的发现属性就相当于是一种介质,我们可以通过属性名来对数据成员进行操作。

所以要使用属性最重要的一点就是要知道属性名,这样我们才可以使用setPropertyproperty

OK,接下来我们来获取属性
在这里插入图片描述

属性属于元对象,因此我们可以通过元对象间接的拿到属性
auto是自动类型推导
metaObject获取对象的元对象信息
propertyCount获取类的属性数量
通过函数property来获取具体的属性信息。
需要头文件:#include ‘‘QMetaProperty’’
然后通过name()来获取到属性的名字
知道了属性名字就可以用property(属性名)知道属性的值

运行结果:
会把刚刚我们定义的所有属性都打印出来。
在这里插入图片描述

三.运行时添加属性(动态属性)★

前面讲的都是属性的基本用法静态属性,接下来我们来玩玩动态属性。

何为动态,就是在运行的过程中我可以想添加就添加属性。

我们先来设置一个ui界面,让我们能够在程序运行的时候,进行添加属性。
在这里插入图片描述
然后我们在生成属性的按钮上用转到槽。
在这里插入图片描述

用法和静态差不多,甚至更简单,只需要使用setPropertyproperty就行了,根本不需要提前去定义属性
setProperty的第一个参数的原理是,没有这个属性名就自动的创建一个属性名,然后第二个参数为属性值。
这里是通过输入框是设置属性名,但是属性名必须是const cahr *的类型,而输入框的字符串是QString,因此先转到标准的string,在转到c语言的字符串。

我们可以动态的添加多个属性,接下来我们来试试如何获取所有的属性。

在这里插入图片描述

dynamicPropertyNames()可以获取所有的动态属性名返回的其实是一个Qlist容器,现在可以简单的理解为数组,后面会进行讲解。
这里用了一种新特性,可以方便变量数组,容器等,name是一个变量,names是一个类似于数组的容器,循环一遍,便将里面的值,装到name中,下一次循环就下一个值又装进来,方便进行操作。
这里我们就把所有的动态属性名和值打印出来了

运行效果:
在这里插入图片描述
我在动态添加一个车长的属性
可以看成属性都打印出来了。
在这里插入图片描述

四.总结

到了这里,我们关于静态和动态属性的知识就讲完了!
总结一下:

类的属性方便了调用者,只需要自动属性名,便可对数据成员进行读和写。
属性的添加在类中用Q_PROPERTYREAD或者WRITE来控制读写
使用属性setProperty()property()
访问所有属性名,静态的和动态的不同,静态通过元对象,动态通过获取动态属性名。

能读到这里说明我们有缘!祝你心想事成。
真正的英雄主义只有一种,那就是看透了生活的本质,但依旧热爱生活!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值