Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QSettings反序列化时的问题_Qt - Fatal编程技术网

Qt QSettings反序列化时的问题

Qt QSettings反序列化时的问题,qt,Qt,使用QSettings.setValue()方法持久化QList的尝试似乎效果良好,但在重新启动应用程序后,尝试反序列化会显示错误消息: QVariant::load: unknown user type with name QList<QString> QVariant::load:名为QList的未知用户类型 持久化代码: QSettings settings; QList<QString> data {"first", "second", "third

使用QSettings.setValue()方法持久化QList的尝试似乎效果良好,但在重新启动应用程序后,尝试反序列化会显示错误消息:

QVariant::load: unknown user type with name QList<QString>
QVariant::load:名为QList的未知用户类型
持久化代码:

QSettings settings;     
QList<QString> data {"first", "second", "third"};
settings.setValue("sourceList", QVariant::fromValue(data));
QSettings设置;
QList数据{“第一”、“第二”、“第三”};
settings.setValue(“sourceList”,QVariant::fromValue(数据));

基本类型的对象运行良好。出了什么问题?

在分析了现有代码之后,我发现在QApplication实例化之前注册流操作符可以解决问题

qRegisterMetaTypeStreamOperators<QList<QString>>("Data");
QApplication a(argc, argv);
qRegisterMetaTypeStreamOperators(“数据”);
质量保证申请a(argc、argv);

我不清楚为什么在非linux环境中不需要这样做。

QList
更改为
QStringList
我没有提到,问题发生在我的linux x86_64环境中,但在WIN32或APPLE上似乎没有问题。上述解决方案在linux上运行良好,但示例代码在WIN32和APPLE上运行,通过解决方法,应用程序将与磁盘上的现有安装和持久数据不兼容。在Windows和Mac OS中,您是否有错误消息:
QVariant::load:unknown user type with name QList
?我没有Windows或Mac OS,但该应用程序已运行约1年,在这些平台上没有任何报告的问题,请使用#define来实现逻辑:
#如果已定义(Q#OS#u LINUX)QStringList数据{“第一”、“第二”、“第三”}#else-QList数据{“第一”、“第二”、“第三”}#endif
尽管我认为我的解决方案与所有操作系统兼容。