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