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帮助文档