1

如何在不使用 QT 的情况下将输出 QVariant 反序列化为 std::string。

根据要求,我的程序不能包含 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);
}
4

1 回答 1

1

查看源代码,可能是 src/corelib/kernel/qvariant.cpp 的QDataStream& operator<<(QDataStream&, const QVariant&). 这样你就会知道在序列化过程中会写什么。

完成后,您将看到 operator<< 调用 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 以弄清楚它们是如何序列化的。

于 2012-05-29T18:58:46.777 回答