北京电商网站开发价格,不需要iis的网站开发,wordpress学校模板,wordpress 加入地图目录 使用场景元对象相关类及宏常用功能获取类相关内容以及委托调用 使用场景
Qt基于强大的元对象系统实现反射机制#xff1b; 在复杂的开发需求中#xff0c;我们希望通过一些手段映射出我们的类#xff08;映射对象#xff09; 然后直接使用#xff0c;通过#xff0… 目录 使用场景元对象相关类及宏常用功能获取类相关内容以及委托调用 使用场景
Qt基于强大的元对象系统实现反射机制 在复杂的开发需求中我们希望通过一些手段映射出我们的类映射对象 然后直接使用通过映射对象中提供的字段属性的设置接口方法委托调用的调用接口可以很好的实现我们的需求
元对象相关类及宏
类
QMetaClassInfo
QMetaEnum 处理枚举
QMetaObject 处理对象
QMetaProperty 处理属性
QMetaMethod 处理方法
QMetaType 处理类型宏
Q_PROPERTY属性
Q_INVOKABLE方法常用功能
先创建一个派生QObject的类SysUser SysUser.h
#ifndef SYSUSER_H
#define SYSUSER_H#include QObjectclass SysUser : public QObject
{Q_OBJECTQ_PROPERTY(int id READ getId WRITE setId)public:explicit SysUser(QObject *parent nullptr);SysUser(const SysUser other);public:Q_INVOKABLE int getId();Q_INVOKABLE void setId(int id);private:int id;signals:public slots:
};#endif // SYSUSER_H
SysUser.cpp
#include SysUser.h
#include QDebugSysUser::SysUser(QObject *parent) : QObject(parent)
{id 1;
}SysUser::SysUser(const SysUser other)
{}int SysUser::getId()
{return id;
}void SysUser::setId(int id)
{this-id id;
}
获取类相关内容以及委托调用 qDebug() SysUser::staticMetaObject.className(); //获取类名qDebug() SysUser::staticMetaObject.propertyCount(); //获取属性个数qDebug() SysUser::staticMetaObject.methodCount(); //获取方法个数qDebug() SysUser::staticMetaObject.constructorCount(); //获取构造器个数//-----属性相关, 只能操作Q_PROPERTY暴露的属性SysUser user;qDebug() user.setProperty(id,123); //修改属性值qDebug() user.property(id); //获取属性值qDebug() SysUser::staticMetaObject.property(1).name(); //获取属性名qDebug() SysUser::staticMetaObject.property(1).isWritable(); //判断属性是否可写qDebug() SysUser::staticMetaObject.property(1).isReadable(); //判断属性是否可读qDebug() SysUser::staticMetaObject.property(1).typeName(); //获取属性类型名qDebug() SysUser::staticMetaObject.property(1).userType(); //获取属性类型值qDebug() SysUser::staticMetaObject.property(1).type(); //获取属性QVariant类型枚举qDebug() SysUser::staticMetaObject.property(1).isUser(); //判断是否为用户自定义类型属性, 用QMetaType注册的类型qDebug() SysUser::staticMetaObject.property(1).isValid(); //判断是否有效//-----方法相关,只能操作Q_INVOKABLE暴露的方法qDebug() SysUser::staticMetaObject.method(5).name(); //获取方法名int res;QMetaObject::invokeMethod(user,getId,Qt::DirectConnection, Q_RETURN_ARG(int,res)); //同步执行//QMetaObject::invokeMethod(user,getId,Qt::QueuedConnection, Q_RETURN_ARG(int,res)); //异步执行qDebug() res;//-----动态构造只能操作qRegisterMetaTypeSysUser(SysUser);注册了的类型qDebug() QMetaType::type(SysUser); //0表示找不到此类型qDebug() QMetaType::create(QMetaType::type(SysUser));//构造对象