Qt 如何存储对象类型并仅使用该信息创建对象

Qt 如何存储对象类型并仅使用该信息创建对象,qt,metaobject,Qt,Metaobject,我希望将元对象存储在如下列表中: myList = QList<QMetaObject>(); myList->append(MyClass::staticMetaObject); myList->append(MyOtherClass::staticMetaObject); 我想在整个应用程序中跟踪这些对象,但现在还不想分配它们。通过在类中添加一些信息,我将能够使用元对象函数ClassInfo.value。当我将它们存储在QListWidget中时,我会使用它。当按下

我希望将元对象存储在如下列表中:

myList = QList<QMetaObject>();
myList->append(MyClass::staticMetaObject);
myList->append(MyOtherClass::staticMetaObject);
我想在整个应用程序中跟踪这些对象,但现在还不想分配它们。通过在类中添加一些信息,我将能够使用元对象函数ClassInfo.value。当我将它们存储在QListWidget中时,我会使用它。当按下QListWidget中的一行时,我希望能够创建存储在列表中的特定类型的对象。 还必须添加所有类都来自同一基类

这个示例代码描述了我想做的一点事情,除了在他的示例中,您可以在进行过程中添加类。

我通读了手册,当我尝试以下事情时:

MyBaseClass *test = qobject_cast<MyBaseClass*>myList->at(i).newInstance();
项目会编译,但当我尝试打印测试对象时,它的值为null。我做错了什么?这是最好的方法吗

我也在研究元类型,但是如果不允许我创建对象,我可以在哪里存储,例如菜单的字符串?如果我有一个返回字符串的静态函数,这会是一个更好的解决方案吗

编辑: 我现在改变了,使构造函数是Q_可调用的,这解决了test==null的问题


但这种解决方案的缺点是什么?我是不是应该用一个对象工厂,一个老式的开关盒?

如果这是你真正需要的,你真的需要好好想想。这几乎肯定是在常规C++中错误的方法,所有QT都是给你更多的绳子来挂起你自己。你确定这个演员能行吗?它看起来坏了。它坏了,不起作用。但是,我怎样才能创建一个包含我稍后将创建的不同类型的类的列表,然后使用该列表创建对象呢?听起来你的设计是错误的。你到底想用那讨厌的东西达到什么目的?你也可以用常规的TMP来代替Qt内省。我所要做的就是在应用程序开始时决定我想要创建什么样的类,然后在按下按钮时,根据按钮所在的行,创建其中一个对象。在我的问题中,我要问:为什么这会失败,还有什么更好的解决方案?如果你不能回答这个问题,你就根本不应该回答。换一个好的旧开关怎么样?如果?确定控制流的函数指针列表?