QSettings 无法正确处理包含斜杠的key
本文最后更新于:2024年6月22日 晚上
前情提要
um,这次长话短说好吧
在Qt中,我们经常会用QSettings来读写配置文件,注册表等
‘\‘:二义性
一般情况下没有什么问题,但是当key中包含反斜杠('\') or 斜杠( '/')的时候,就寄了
文档:不要在节名或键名中使用斜杠(“/”和“\”);反斜杠字符用于分隔子键(见下文)。在 Windows 上,“\”被 QSettings 转换为“/”,这使得它们相同
1 | |
斜杠被用于分割子键,所以当key本身含有斜杠时(如:"C:\App\test.exe" in MuiCache),QSettings无法处理
- 可能被认为是分割符
- 或者被转换为
"C:/App/test.exe"(我遇到了)(找了好久bug 哭)
(这其中的逻辑还没有非常搞清楚:为什么路径不会被认为是分割符 而是产生了一个"C:/App/test.exe"这样的key)
文档:
请注意,如前所述,
QSettings使用反斜杠字符来分隔子项。因此,您无法读取或写入包含斜杠或反斜杠的Windows注册表项;如果需要,您应该使用本机
Windows API
文档中说分割使用反斜杠('\'),但是代码例子中用的是斜杠( '/'),有点迷糊
总结:
- 分割子键使用:斜杠(
'/') key中包含'\'or'/'(如 路径),就不要用QSettings了,改用Windows API - RegOpenKeyEx- 注意,我说的是
key,notvalue,值中包含斜杠没有问题
peace
Ref
QSettings 无法正确处理包含斜杠的key
https://mrbeancpp.github.io/2024/06/22/QSettings-无法正确处理包含斜杠的key/