Сохранить QList <T>в QVariant и передать в QDataStream? - PullRequest
3 голосов
/ 17 сентября 2009

Вот демонстрационный код:

QList<Custom> L;
QVariant v(QVariant::fromValue(l));
QDataStream d;
d << v;

Проблема, похоже, в том, что d не знает, как передавать поток v, потому что v не знает, как сохранить метатип на L. Я зарегистрировал Custom и L как метатипы, а также зарегистрировал их IO потоки, но L не имеет мета-объекта, и я думаю, что это проблема.

Можно ли как-нибудь обойти это?

Позднее редактировать:
После отладки кода QMetaType я обнаружил, что при вызове qRegisterMetaTypeStreamOperators<Type>("TypeString") «TypeString» должно быть «Type», а не просто любая строка. Это было упомянуто в документации, но это не совсем понятно. Ссылка QtCentre также упоминала об этом. Я решил принять ответ Калеба Педерсона, потому что я виноват в том, что нашел трудный путь. :)

1 Ответ

2 голосов
/ 17 сентября 2009

Вам необходимо зарегистрировать операторы вывода для данного типа. Смотрите также аналогичный вопрос на QtCentre .

Это означает, что вам необходимо определить операторы вывода, не являющиеся членами, совпадающие с сигнатурой, определенной в документации , а затем вызвать qRegisterMetaTypeStreamOperators.

...