Вот демонстрационный код:
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 также упоминала об этом. Я решил принять ответ Калеба Педерсона, потому что я виноват в том, что нашел трудный путь. :)