Название: Преобразование из QVariant наследуемого типа Отправлено: yoyo от Февраль 15, 2008, 13:46 Имеется базовый класс BaseClass (не наследник QObject) с виртуальным методом virtMethod и наследуемый от него ChildClass, с перекрываемым методом virtMethod. Оба класса описаны с Q_DECLARE_METATYPE для возможности сохранять их в QVariant.
Код: QVariant v = qVariantFromValue(ChildClass()); Проблема в том, что qVariantCanConvert всегда будет возвращать false, хотя BaseClass и является родительским. Можно ли обойти этот момент без проверки qVariantCanConvert<ChildClass>(v)? Название: Re: Преобразование из QVariant наследуемого типа Отправлено: Tonal от Февраль 16, 2008, 13:02 В QMetaType нет информации о наследовании и конвертировании.
Так что облом. Название: Re: Преобразование из QVariant наследуемого типа Отправлено: pastor от Февраль 16, 2008, 14:31 Можно перейти на указатели на эти типы. Должно получиться. Т.е.:
Код: Q_DECLARE_METATYPE(BaseClass *); Название: Re: Преобразование из QVariant наследуемого типа Отправлено: vaprele07 от Февраль 16, 2008, 15:25 или почитать про qRegisterMetaTypeStreamOperators
Название: Re: Преобразование из QVariant наследуемого типа Отправлено: yoyo от Февраль 16, 2008, 21:39 Цитировать или почитать про qRegisterMetaTypeStreamOperators Ну, реализую я для своих классов потоковые операции << и >>. Ну, объявлю об этой способности своих классов с помощью функции qRegisterMetaTypeStreamOperators<T>. Конечно, это позволит, в какой-то мере, автоматизировать процесс сохранения моих данных, используя QSettings (даже в виде объектов QVariant). Это красиво, но проблему не снимает. Или я чего-то не понимаю.Название: Re: Преобразование из QVariant наследуемого типа Отправлено: yoyo от Февраль 16, 2008, 22:48 Переход на указатели действительно помог! Только небольшая поправка в коде:
Код: BaseClass *сс = new ChildClass(); |