Qt中Q_PROPERTY定义属性以及属性的使用

Q_PROPERTY(type name 
READ  getFunction  //属性名
[WRITE setFunction] //读函数
[RESET resetFunction]      
[NOTIFY notifySignal] 
[DESIGNABLE bool] 
[SCRIPTABLE bool] 
[STORED bool] 
[USER bool] 
[CONSTANT] 
[FINAL]) 

其实不知道这个定义中属性name是干什么的,网上搜的都说是注册到元对象系统中,使用setProperty能够直接访问name,然后通常在类的私有成员里再定义一个m_name,用getFunction读m_name,用setFunction设置m_name,那这样子跟name有什么关系。

我是这样理解的,Q_PROPERTY只是一个声明,与name相关的是get/set这组函数,name虽然能在designer中直接使用,但还是通过get/set来实现的,其实name的值就是读函数get的返回值,不知道这样理解对不对,暂时这么理解,回头整理好了思路或者有更好的想法再来完善

   上面说的类中定义的一个数据成员m_name,其实这个变量跟Q_PROPERTY定义的name没什么关系,name的值就是你read函数中的值,如果你在read函数关联了变量m_name,当然就name就与m_name有关系,如果没关联,当然也就没关系

   在学习的过程中,一直找不到notify这个signal是在哪里发射的,学习了很久才发现自己一直都被绕进去了,现在终于想通了,这个signal的发射也是手动添加的,一般来说是在setFunction中发射的。

   原来,getFunction/setFunction/notifySignal都是本来已经存在的东西也就是说是你自己在类里边定义的东西,Q_PROPERTY只是将他们注册到元对象系统中,并且起了个名字叫name,使之能够使用元对象系统操作name,包括在designer中,qml中,都可以直接用name这个属性,但是在C++中的读写只能使用get/set了


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值