Как зарегистрировать следующий тип данных, чтобы разрешить сериализацию? - PullRequest
4 голосов
/ 02 июня 2011

Я использую QJson для сериализации класса QObject. Я могу сериализовать сам класс без каких-либо проблем, но когда дело доходит до одного из его членов, у меня возникают небольшие проблемы.

Класс называется CProject и содержит свойство files, которое определяется как:

QList<CProjectFile> files;

При сериализации экземпляра CProject в консоли появляется сообщение:

QMetaProperty::read: Unable to handle unregistered datatype 'QList<CProjectFile>' for property 'CProject::files'

Я где-то читал, что мне нужно зарегистрировать тип данных, поэтому я добавил следующее после объявления CProject:

Q_DECLARE_METATYPE(QList<CProjectFile>)

... и когда это ничего не дало, я добавил:

qRegisterMetaType< QList<CProjectFile> >();

Ничего не работает. Что я делаю не так?

1 Ответ

5 голосов
/ 02 июня 2011

Я не знаю, как работает QJson, но, возможно, для этого нужны потоковые операторы.Попробуйте, как показано ниже, после объявления класса CProjectFile

class CProjectFile
{
   ...
};

    Q_DECLARE_METATYPE(CProjectFile)

    qRegisterMetaType<CProjectFile>("CProjectFile");//Do this if you need signal/slots

    qRegisterMetaTypeStreamOperators<QList<CProjectFile> >("CProjectFileList");

См. Также QT Doc для операторов потока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...