c++ - QSettings 不区分字符串和整数值

标签 c++ qt types qsettings

我正在使用文件支持的QSettings对象写入和读取字符串和int值。 当我稍后尝试从不同的进程读取值时,这些值被读取为字符串而不是整数。

这是我用来写入值的代码:

QSettings settings("TestQSettings.ini", QSettings::IniFormat);
settings.setValue("AAA",QString("111"));
settings.setValue("BBB",222);

这是创建的文件:

[General]
AAA=111
BBB=222

这是我用来读取值的代码:

QVariant qvar = settings.value("AAA");
std::cout << "AAA type " << qvar.type() << std::endl;
qvar = settings.value("BBB");
std::cout << "BBB type " << qvar.type() << std::endl;

如果我从同一进程运行此代码:

AAA type 10
BBB type 2

如果我从不同的进程运行此代码:

AAA type 10
BBB type 10

我知道在读取类型后可以对其进行转换。 不幸的是,这个解决方案需要修改 Windows 遗留的跨平台代码,但我不喜欢修改,例如多次调用 RegQueryValueEx()

是否可以存储和读取字符串和整数的类型信息?

例如,字符串将有引号 "" 而整数则不会:

[General]
AAA="111"
BBB=222

这个问题在 Linux 上的 Qt 4 和 Qt 5 上都存在。

最佳答案

哇哦,你使用的是 .ini 文件还是注册表?

对于 .ini 文件,显然不可能知道类型是什么,因为它都是字符串。您可以尝试将变体转换为整数(不要使用canConvert!),并在转换为 1 时假定它是整数。

通过注册表,QSettings 将按照您的预期工作。

我真的不明白问题出在哪里。如果您希望保留类型信息,请不要使用 .ini 文件。如果您以依赖于平台的方式手动编写代码,您将面临完全相同的问题。

您可以将带引号的字符串显式写入 .ini 文件中,并在读回它们时检查是否存在引号。如果引号不存在,您可以尝试转换为整数。

关于c++ - QSettings 不区分字符串和整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355112/

相关文章:

c++ - 设备说它可用,但无法在 OpenCL 中创建上下文

c++ - 使用 The Boost Graph Library 寻路(在网格中)

Python随机改变数据类型

c++ - 类(class)成员指向类(class)成员

c++不一致的无符号到有符号的减法结果仅对于一种排列失败

qt - 如何从YouTube网址(如VLC)播放视频?

c++ - 编译 Qt 项目以在 Linux 系统上运行

qt - 如何将 QByteArray 转换为十六进制字符串?

Java接口(interface) "Alias"

c++ - 使用变量的类型作为模板参数