0

我想将 MetaObjects 存储在这样的列表中:

myList = QList<QMetaObject>();
myList->append(MyClass::staticMetaObject);
myList->append(MyOtherClass::staticMetaObject);

我想在整个应用程序中跟踪这些对象,但我还不想分配它们。通过在我的类中添加一些信息,我将能够使用 MetaObject 函数“classInfo(int).value()”。当我将它们存储在 QListWidget 中时,我会使用它。当按下 QListWidget 中的一行时,我希望能够创建存储在列表中的特定类型的对象。(还必须补充一点,所有类都来自同一个基类)

此示例代码描述了我想做的一些事情,除了在他的示例中,您可以在进行时添加类。 http://lists.qt.nokia.com/pipermail/qt-interest/2012-January/037204.html

我通读了手册,当我尝试以下操作时:

MyBaseClass *test = qobject_cast<MyBaseClass*>myList->at(i).newInstance();

该项目可以编译,但是当我尝试打印“测试”对象时,它的值为空。我究竟做错了什么?这是最好的方法吗?

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

编辑:我现在改变了,所以构造函数是 Q_INVOKABLE,它解决了“test == null”的问题。

但是这个解决方案的缺点是什么?我应该只使用对象工厂(带有开关盒的旧时尚方式)吗?

4

0 回答 0