其他分享
首页 > 其他分享> > 【Qt】关于Meta对象的一些函数及说明

【Qt】关于Meta对象的一些函数及说明

作者:互联网

metaObject()该函数返回类关联的元对象const QMetaObject
inherit(object)该函数返回bool值,判断对象实例是否为类/子类对象,及父类到派生类都返回true

宏Q_PROPERTY(type name READ … WRITE … MEMBER … RESET … NOTIFY … DESIGNABLE … CONSTANT … FINAL)
type 为属性类型,如QString ,int ,bool
name为属性名,自定义
READ指定一个读取属性值的函数,没有MEMBER关键字时必须设置READ
WRITE指定一个设置属性的值的函数
MEMBER指定一个成员变量与属性关联,成为可读可写的属性,无需再设置READ和WRITE
RESET可选,用于指定设置属性是默认值的函数
NOTIFY可选,用于设置一个信号,属性值变化时发射此信号
DESIGNABLE用于设置属性是否在qt designer里可见
CONSTANT表示属性值是一个常量,使用后不可再用WRITE和NOTIFY
FINAL表示所定义的属性不被子类重载

宏Q_CLASSINFO(QString,QString)用于定义类附件信息,如author(作者)
company(公司)version(版本)createdate(创建日期)finalmoditydate(最终修改日期)patchdate(补丁日期)等

property()与classInfo()
两者都可通过索引获取,获取对象分别为QMetaProperty与QMetaClassInfo,这两种类都有name函数
还有propertyOffset()与propertyCount()与classInfoOffset()与classInfoCoun()函数,两个Offset函数可以获取第一个属性、类附加信息的索引(这里提示下,第一个属性的索引不一定是为0的)
两个count函数可以获取属性、类附加信息的个数,当想遍历propery或classinfo时,可以采用
(下文中的meta是通过对象.metaObject()获取的)

for(i = meta->propertyOffset() ; i  < meta->propertyCount();i++)
{
  QMetaProperty prop = meta->property(i);
  const char * propName = prop.name()
  QString propValue=meta->property(propName).toString();
  //这里注意没有value这个函数,要像map一样通过key获取value
  }
  //QMetaClassInfo是有value这个函数的
  //例:
  for(i = meta->classOffset() ; i  < meta->classCount();i++)
{
  QMetaClassInfo classInfo = meta->classInfo(i);
  const char * infoName= classInfo.name()
  QString infoValue=meta->classInfo.value();
}

来获取,注意如果classInfo的话返回值是QMetaClassInfo

标签:classInfo,函数,name,Meta,meta,QString,Qt,属性
来源: https://blog.csdn.net/weixin_51965272/article/details/122722021