2012-05-11 4 views
1

Qtを使用せずに出力QVariantをstd :: stringに逆シリアル化できますか?QtなしでQVariantの出力を逆シリアル化する方法

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

QTでIniファイルにデータを保存するプログラムがあります。データは "\ x1 \ 0 \ 0 \ 0 \ xd0 \ x8c \ x9d \ xdf \ x1 \ x"として記録されるので、処理するためにchar *に変換する必要があります – Agus

+3

出力を逆シリアル化したいQtを含まないプロジェクトのQVariant。あなたは間違って元の質問に言い聞かせました。私はあなたの投稿を編集し、例を追加することをお勧めします。 – Joe

答えて

1

見て、おそらくのsrc/Corelibでは/カーネル/ qvariant。 cpp for 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をドリルダウンする必要があります。

関連する問題