我想将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();
项目编译但当我尝试打印“test”对象时为null。我究竟做错了什么?这是最好的方法吗?
还在看MetaType,但是如果我不允许创建对象,我可以在哪里存储,例如菜单的字符串?如果我有一个返回字符串的静态函数,这会是一个更好的解决方案吗?
编辑: 我现在改了,所以构造函数是Q_INVOKABLE,它解决了“test == null”的问题。
但这个解决方案的缺点是什么?我应该只使用一个对象工厂(带有开关盒的老式方式)?