Qt通过类名创建类实例

QObject的子类都有一个staticMetaObject静态成员变量,可通过staticMetaObject.newInstance()来创建这个类的实例。如果我们用QMap将类名和这个类的staticMetaObject成员变量映射起来,就可以实现通过类名创建类对象:

class Dialog //继承于QDialog的界面类
QMap<QString,QMetaObject> map;
map["Dialog"]=Dialog::staticMetaObject;
QWidget*w=(QWidget*)map["Dialog"].newInstance();

使用这个方法有三点需要注意:
1、继承QObject或其子类
2、使用Q_OBJECT宏
3、构造函数前需要加上Q_INVOLKABLE

如果构造函数带有参数的话,可以使用Q_ARG()传入参数
假设有构造函数 Dialog(QString str);
创建时可这样用:

QString str="要传入的参数";
Dialog::staticMetaObject.newInstance(Q_ARG(QString,str))

newInstance()可以同时使用多个Q_ARG(),详细信息可参考Qt帮助文档

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值