2012-05-11 3 views
1

Как я могу десериализовать выходной QVariant в std :: string без использования QT.Как десериализовать вывод из QVariant без Qt

по reqs, моя программа не может включать Qt.

QVariant.toString().toStdString();

Пример.

file.ini (запись с QSetting) ..

ID="\x1\0\0\0\xd0\x8c\xd9\xec\xfb*" 

profile_program/* Псевдо Код */

int main() 
{ 
    void* IDQt =getIDFromIniFile("file.ini"); 
    std::string myId = convertID(IDQt); 
    process(myID); 
} 
+3

Как у вас есть «QVariant», а затем есть ограничение на невозможность вызвать своих публичных пользователей? – Joe

+0

Там программа, которая сохраняет данные в файл Ini с QT. Данные записываются как «\ x1 \ 0 \ 0 \ 0 \ xd0 \ x8c \ x9d \ xdf \ x1 \ x", поэтому мне нужно преобразовать в char * для их обработки. – Agus

+3

Чтобы уточнить, вы хотите десериализовать вывод из QVariant в проекте, который не включает Qt. Вы неправильно сформулировали свой первоначальный вопрос, я рекомендую вам отредактировать сообщение и добавить пример. – Joe

ответ

1

Посмотрите в источниках, вероятно, SRC/corelib/ядро ​​/ QVariant. cpp для QDataStream& operator<<(QDataStream&, const QVariant&). Таким образом, вы узнаете, что написано во время сериализации.

Как только вы это сделаете, вы увидите, что оператор < < вызывает QVariant :: save (QDataStream &). Что написано следующим образом:

quint32 QVariant::type() 
quint8 QVariant::isNull() 
if type()==UserType 
    QString MetaType::typeName(userType()) 
end 
if the variant is not valid 
    QString empty 
else 
    -- MetaType::save(...) 
end 

Вам необходимо углубиться в QString и QMetaType, чтобы выяснить, как те, упорядочиваются.