Как хранить типы объектов и создавать объекты, используя только эту информацию - PullRequest
0 голосов
/ 14 февраля 2012

Я бы хотел сохранить метаобъекты в списке, подобном следующему:

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".

Но каковы недостатки этого решения?Должен ли я просто использовать фабрику объектов (по старинке с переключателем)?

...