【qt】动态属性(下)

简介: 【qt】动态属性(下)

一.最简单的属性

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

因此咱们有一个最简单的属性,不用再自己去定义读写的方法,就可以直接可以进行读和写。

关键字就是的 MEMBER 成员,什么都不用做,只需要添加一个成员数据,跟MEMBER后面的变量名一样即可。

然后咱们就可以直接使用了。

我们可没有定义方法哦,就可以直接进行读和写操作了。

运行结果:

二.访问类的所有属性

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


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

OK,接下来我们来获取属性

属性属于元对象,因此我们可以通过元对象间接的拿到属性

auto是自动类型推导

metaObject获取对象的元对象信息

propertyCount获取类的属性数量

通过函数property来获取具体的属性信息。

需要头文件:#include ‘‘QMetaProperty’’

然后通过name()来获取到属性的名字

知道了属性名字就可以用property(属性名)知道属性的值


运行结果:

会把刚刚我们定义的所有属性都打印出来。

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

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

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

我们先来设置一个ui界面,让我们能够在程序运行的时候,进行添加属性。


然后我们在生成属性的按钮上用转到槽。

用法和静态差不多,甚至更简单,只需要使用setProperty和property就行了,根本不需要提前去定义属性

setProperty的第一个参数的原理是,没有这个属性名就自动的创建一个属性名,然后第二个参数为属性值。

这里是通过输入框是设置属性名,但是属性名必须是const cahr *的类型,而输入框的字符串是QString,因此先转到标准的string,在转到c语言的字符串。


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

25f9621ecfe048dfb80101bfafc74c19.png

dynamicPropertyNames()可以获取所有的动态属性名返回的其实是一个Qlist容器,现在可以简单的理解为数组,后面会进行讲解。

这里用了一种新特性,可以方便变量数组,容器等,name是一个变量,names是一个类似于数组的容器,循环一遍,便将里面的值,装到name中,下一次循环就下一个值又装进来,方便进行操作。

这里我们就把所有的动态属性名和值打印出来了

运行效果:

我在动态添加一个车长的属性

可以看成属性都打印出来了。

四.总结

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

总结一下:

类的属性方便了调用者,只需要自动属性名,便可对数据成员进行读和写。

属性的添加在类中用Q_PROPERTYREAD或者WRITE来控制读写

使用属性setProperty()property()

访问所有属性名,静态的和动态的不同,静态通过元对象,动态通过获取动态属性名。

能读到这里说明我们有缘!祝你心想事成。

真正的英雄主义只有一种,那就是看透了生活的本质,但依旧热爱生活!

相关文章
|
6月前
|
程序员 数据安全/隐私保护 C++
【qt】动态属性
【qt】动态属性
77 1
|
3月前
|
前端开发 搜索推荐 API
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
202 5
|
6月前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
6月前
|
存储 安全 编译器
【Qt 底层之属性系统】Qt 属性系统全景:深入解析 Q_PROPERTY 宏的核心作用
【Qt 底层之属性系统】Qt 属性系统全景:深入解析 Q_PROPERTY 宏的核心作用
437 2
|
6月前
|
算法 开发者
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
657 1
|
6月前
|
XML API 数据格式
【Qt 学习笔记】QWidget的enable属性 | API的介绍
【Qt 学习笔记】QWidget的enable属性 | API的介绍
168 0
|
6月前
|
算法 程序员 C++
【Qt 焦点】深入解析 焦点枚举 Qt::FocusPolicy 属性及其在不同版本中的应用
【Qt 焦点】深入解析 焦点枚举 Qt::FocusPolicy 属性及其在不同版本中的应用
308 0
|
6月前
|
存储 缓存
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
194 0
|
编译器 程序员 C++
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
2472 0
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
|
6月前
|
C++
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
104 0