一.最简单的属性
想要对一个数据成员进行读和写我们一般都会使用set或者get这种类型的自定义的函数去间接访问,且使用非常的频繁。
因此咱们有一个最简单的属性,不用再自己去定义读写的方法,就可以直接可以进行读和写。
关键字就是的 MEMBER 成员,什么都不用做,只需要添加一个成员数据,跟MEMBER后面的变量名一样即可。
然后咱们就可以直接使用了。
我们可没有定义方法哦,就可以直接进行读和写操作了。
运行结果:
二.访问类的所有属性
通过上面的用法,我可以渐渐的发现属性就相当于是一种介质,我们可以通过属性名来对数据成员进行操作。
所以要使用属性最重要的一点就是要知道属性名,这样我们才可以使用setProperty和property
OK,接下来我们来获取属性
属性属于元对象,因此我们可以通过元对象间接的拿到属性
auto是自动类型推导
metaObject获取对象的元对象信息
propertyCount获取类的属性数量
通过函数property来获取具体的属性信息。
需要头文件:#include ‘‘QMetaProperty’’
然后通过name()来获取到属性的名字
知道了属性名字就可以用property(属性名)知道属性的值
运行结果:
会把刚刚我们定义的所有属性都打印出来。
三.运行时添加属性(动态属性)★
前面讲的都是属性的基本用法静态属性,接下来我们来玩玩动态属性。
何为动态,就是在运行的过程中我可以想添加就添加属性。
我们先来设置一个ui界面,让我们能够在程序运行的时候,进行添加属性。
然后我们在生成属性的按钮上用转到槽。
用法和静态差不多,甚至更简单,只需要使用setProperty和property就行了,根本不需要提前去定义属性
setProperty的第一个参数的原理是,没有这个属性名就自动的创建一个属性名,然后第二个参数为属性值。
这里是通过输入框是设置属性名,但是属性名必须是const cahr *的类型,而输入框的字符串是QString,因此先转到标准的string,在转到c语言的字符串。
我们可以动态的添加多个属性,接下来我们来试试如何获取所有的属性。
dynamicPropertyNames()可以获取所有的动态属性名返回的其实是一个Qlist容器,现在可以简单的理解为数组,后面会进行讲解。
这里用了一种新特性,可以方便变量数组,容器等,name是一个变量,names是一个类似于数组的容器,循环一遍,便将里面的值,装到name中,下一次循环就下一个值又装进来,方便进行操作。
这里我们就把所有的动态属性名和值打印出来了
运行效果:
我在动态添加一个车长的属性
可以看成属性都打印出来了。
四.总结
到了这里,我们关于静态和动态属性的知识就讲完了!
总结一下:
类的属性方便了调用者,只需要自动属性名,便可对数据成员进行读和写。
属性的添加在类中用Q_PROPERTY 用READ或者WRITE来控制读写
使用属性setProperty()和property()
访问所有属性名,静态的和动态的不同,静态通过元对象,动态通过获取动态属性名。
能读到这里说明我们有缘!祝你心想事成。
真正的英雄主义只有一种,那就是看透了生活的本质,但依旧热爱生活!